sql — MySQL сортирует DESC и ASC
спросил
Изменено 5 лет, 7 месяцев назад
Просмотрено 1к раз
У меня есть таблица с полями:
id | group_id 1 | нулевой 2 | нулевой 3 | нулевой 4 | 4 5 | 4 6 | 4 7 | 7 8 | 7 9 | нулевой
, и я хотел бы отсортировать его так:
id | group_id 9 | нулевой 7 | 7 8 | 7 4 | 4 5 | 4 6 | 4 3 | нулевой 2 | нулевой 1 | нулевой
Так что это будет DESC по идентификатору в целом, но ASC по идентификатору, когда они совместно используют group_id
Спасибо
- mysql
- sql
- sorting
3
Попробуйте
Выберите id, group_id, объединение(group_id, id) из таблицы в порядке 3 desc, 1
Я заставил это работать:
SELECT id, group_id, rank ОТ ( ВЫБЕРИТЕ идентификатор, group_id, @rank:=IF(group_id=@group_id,@rank,@rank+1) AS ранг, @group_id:=group_id ИЗ MyTable ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ (ВЫБЕРИТЕ @rank:=0) КАК _init ЗАКАЗАТЬ ПО ИДЕНТИФИКАТОРУ DESC ) КАК т ПОРЯДОК ПО рангу ASC, id ASC;
Выход:
+----+----------+------+ | идентификатор | идентификатор_группы | ранг | +----+----------+------+ | 9 | НУЛЕВОЙ | 1 | | 7 | 7 | 2 | | 8 | 7 | 2 | | 4 | 4 | 3 | | 5 | 4 | 3 | | 6 | 4 | 3 | | 3 | НУЛЕВОЙ | 4 | | 2 | НУЛЕВОЙ | 5 | | 1 | НУЛЕВОЙ | 6 | +----+----------+------+
Вы можете опустить столбец rank
из списка выбора внешнего запроса, я оставил его там только для того, чтобы проиллюстрировать, как я ранжировал группы.
Я не уверен, что вы можете сделать неупорядоченный порядок столбца идентификатора, но если вам нужен самый низкий идентификатор, где используется общий идентификатор группы, то обновление ответа @Lamar, как это, сделает это
ВЫБЕРИТЕ MIN (id) AS id, group_id ИЗ таблицы СГРУППИРОВАТЬ ПО group_id ORDER BY IFNULL(group_id, 0) DESC, id DESC
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
mysql — Заказ SQL по ASC и DESC
спросил
Изменено 4 года, 3 месяца назад
Просмотрено 3к раз
Следующая инструкция SQL выбирает всех клиентов из таблицы Customers
, отсортированных по столбцам Country
и CustomerName
, но что меня смутило в результате, так как результат страны в порядке, потому что это ASC
-По умолчанию так это началось с A-Z, а также CustomerName
должно быть ASC, но результата нет! так это не ASC, почему?
- mysql
- sql
- база данных
- оракул
- rdbms
6
Ваш результат действительно упорядочен правильно. Сначала он заказывает по стране, а затем по имени клиента. В Аргентине ваши клиенты сортируются правильно. В Бразилии они сортируются правильно.
Если вы ожидали, что Comercio Miniero будет вторым в списке, спросите себя, как это повлияет на ваш порядок сортировки по странам. Порядок сортировки будет выполнять весь первый столбец, а затем в этом существующем порядке он будет выполнять второй столбец, который вы указали.
0
Сортировка в порядке и делает то, что должна.
Сортировка по стране , а затем по клиенту. Клиенты — это по порядку…
Посмотрите внимательнее на результат. В Аргентине клиенты в порядке, а также в Бразилии и т. д.
Как именно вы ожидаете, что он будет сортировать по обоим столбцам одновременно? Данные в отсортированных столбцах перестанут совпадать с данными из той же строки. например «Ранчо Гранде» должно быть где-то внизу, а не рядом с «Аргентиной», к которой оно принадлежит.
То, что вы ожидаете, логически не имеет смысла.
0
Показанные результаты отображаются в указанном порядке.
ЗАКАЗАТЬ ПО СТРАНЕ, ИМЯ ЗАКАЗЧИКА
указывает, что строки будут сначала упорядочены по значению Country
. И результаты выглядят правильно: Аргентина, Австрия, Бельгия, Бразилия.
Для строк с одинаковым значением Country
строки также будут упорядочены по значению CustomerName
.
Опять же, каждый набор строк с одинаковым значением Country отображается правильно, например, для Бразилии C...
, F...
и G...
Если бы мы указали ORDER BY CustomerName
, то мы получили бы строки в другом порядке. С данными примера, без повторяющихся значений CustomerName
, мы могли бы добавить другие выражения к ORDER BY
, и это не повлияет на порядок строк.