Порядок и группа в SQL

0

У меня есть база данных:

Serial no.  Name
1            A
1            B
2            Aa
2            Z
3            D
3            A
3            C

и я хочу, чтобы результат был

Serial no.  Name
2            Aa
2            Z
1            A
1            B
3            D
3            A
3            C

Я хочу, чтобы каждая группа (с тем же номером сериала) сортировалась с другими группами на основе первого имени в группах, но внутри групп порядок имени оставался неизменным.

Я пробовал делать

Select * From tablename
group by 'Serial no.' 
order by 'Name'

но я получаю:

Serial no.  Name
2            Aa
1            A
3            D
  • 0
    Я на самом деле использую основанные на Python DBMS, но они я проверил в MySQL
Теги:
sql-order-by

3 ответа

0

Невозможно выполнить то, что вы хотите с SQL.

Вы хотите, чтобы порядок в каждой группе серийных номеров был таким же, как в таблице, но в таблице нет четко определенного порядка.

Таблица в SQL - это неупорядоченный набор строк, и любой порядок должен быть наложен предложением ORDER BY. Поэтому, если ваш заказ не может быть выражен в SQL и не зависит от физического размещения строк в таблице, ваша проблема не может быть решена.

Порядок строк в таблице может меняться и зависит от реализации. Например, реорганизация может изменить его. В PostgreSQL, например, простое обновление изменяет порядок, и вы даже не гарантированно получаете тот же порядок в двух последовательных сканированиях.

  • 0
    спасибо, @laurenz, но я хочу, чтобы порядок, в котором они упоминаются в группе (тот же серийный номер), оставался таким же, только если вся группа отсортирована по имени, поэтому я думаю, что описание верно. Посмотрите в своем решении, это меняет порядок внутри группы, если я дал D, A, C в серийный номер 3, то он должен всегда оставаться D, A, C.
  • 0
    Я отредактировал свое описание, надеюсь, это поможет и извините за все замешательство, это мой первый раз здесь
Показать ещё 5 комментариев
0

Группировка на вашем столе не имеет никакого смысла. Заказ, сделанный просто отлично.

select Serialno,Name
from table _name
order by Name desc
  • 0
    Это даст Aa AABCDZ в качестве ответа
0

Это данные из таблицы:

SELECT * FROM #temp

Изображение 174551

Select *
from tablename
Order by Serial no DESC, Name;

Это результат, который я получил для следующего запроса:

Изображение 174551

  • 0
    спасибо за ответ, но я не хочу серийный номер. чтобы уменьшить то, что я хочу, это отсортировать каждую группу (т.е. они имеют одинаковый серийный номер) по имени в группе.
  • 0
    Плохие данные выборки. Добавьте (3, «D»), (3, «A») и (4, «C») и скорректируйте ожидаемый результат соответствующим образом.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню