Как отсортировать в обратном порядке sql
Перейти к содержимому

Как отсортировать в обратном порядке sql

  • автор:

Как отсортировать в обратном порядке sql

При выполнении SELECT запроса, строки по умолчанию возвращаются в неопределённом порядке. Фактический порядок строк в этом случае зависит от плана соединения и сканирования, а также от порядка расположения данных на диске, поэтому полагаться на него нельзя. Для упорядочивания записей используется конструкция ORDER BY .

MySQL
SELECT поля_таблиц FROM наименование_таблицы WHERE ... ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]] 

Где ASC и DESC - направление сортировки:

  • ASC - сортировка по возрастанию (по умолчанию)
  • DESC - сортировка по убыванию

Для сортировки результатов по двум или более столбцам их следует указывать через запятую.

MySQL
...ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC]; 

Данные будут сортироваться по первому столбцу, но в случае если попадаются несколько записей с совпадающими значениями в первом столбце, то они сортируются по второму столбцу. Количество столбцов, по которым можно отсортировать, не ограничено.

Правило сортировки применяется только к тому столбцу, за которым оно следует.

ORDER BY столбец_1, столбец_2 DESC

не то же самое, что

ORDER BY столбец_1 DESC, столбец_2 DESC

  • Выведем названия авиакомпаний в алфавитном порядке из таблицы Company :

Сортировка строковых данных по возрастанию подразумевает сортировку в лексикографическом (алфавитном) порядке.

MySQL
SELECT name FROM Company ORDER BY name; 
name
Aeroflot
air_France
British_AW
Dale_avia
Don_avia

MySQL Сортировка в обратном порядке

Сообщения выводятся в порядке убывания времени, а нужно, в порядке возрастания Как можно произвести такую сортировку?

Отслеживать
71.1k 12 12 золотых знаков 90 90 серебряных знаков 180 180 бронзовых знаков
задан 1 мар 2017 в 1:03
Andrei Andrei Andrei Andrei
87 1 1 серебряный знак 6 6 бронзовых знаков
поменяйте ORDER BY a.timestamp DESC на ORDER BY a.timestamp ASC
1 мар 2017 в 1:22

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Убрать DESC или заменить его на ASC (но это не обязательно)

SELECT a.id, a.author, a.txt, a.timestamp, b.log, b.em FROM txt_mesg a LEFT JOIN users b ON b.id = a.author WHERE a.tid = '".$id."' ORDER BY a.timestamp LIMIT 12" 

Отслеживать
ответ дан 1 мар 2017 в 1:08
Mikhail Vaysman Mikhail Vaysman
14.2k 1 1 золотой знак 21 21 серебряный знак 31 31 бронзовый знак

Вам судя по всему надо так же выбрать 12 последних сообщений, но при этом изменить их порядок. решается еще одним уровнем select с другой сортировкой:

SELECT * FROM ( SELECT a.id, a.author, a.txt, a.timestamp, b.log, b.em FROM txt_mesg a LEFT JOIN users b ON b.id = a.author WHERE a.tid = '".$id."' ORDER BY a.timestamp DESC LIMIT 12 ) X ORDER BY timestamp 

Отслеживать
ответ дан 1 мар 2017 в 6:33
44.1k 3 3 золотых знака 34 34 серебряных знака 66 66 бронзовых знаков

  • mysql
  • sql
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Урок 4. Сортировка результатов

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

В первом уроке мы написали SQL-запрос для получения данных о совершенолетних пользователях. Посмотрим на него еще раз:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18
Совершеннолетние пользователи

id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
3 Шевченко Тимур 1998-04-27
4 Иванова Светлана 1993-08-06
6 Иванов Алексей 1993-08-05
7 Процук Алена 1997-02-28

Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструции WHERE: ORDER BY last_name:.

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name

После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке:

Сортировка по фамилии

id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
6 Иванов Алексей 1993-08-05
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

Обратите внимание, что данные отсортированы только по фамилии, но не по другим полям. Однако давайте добавим через запятую еще один столбец, например, first_name:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name, first_name

Теперь таблица отсортирована сразу по двум поля, сперва по фамилии, а уже затем по имени:

Сортировка по фамилии и имени

id last_name first_name birthday
6 Иванов Алексей 1993-08-05
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY birthday

И получить данные упорядоченные по дате рождения в хронологическом порядке:

Сортировка по дате рождения

id last_name first_name birthday
6 Иванов Алексей 1993-08-05
4 Иванова Светлана 1993-08-06
1 Иванов Дмитрий 1996-12-11
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

А если в конструкции ORDER BY после имени столца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше:

Сортировка по дате рождения в обратном порядке

id last_name first_name birthday
3 Шевченко Тимур 1998-04-27
7 Процук Алена 1997-02-28
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
6 Иванов Алексей 1993-08-05

Более того при сортировке данных по нескольким столцам, мы можем для разных столцов указывать разные направления сортировки. Например ORDER BY last_name, birthday DESC:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name, birthday DESC

Тогда данные будут сперва отсортированы в алфавитном порядке по фамилии, а уже внутри каждой фамилии по дате рождения в обратном порядке:

Сортировка по дате рождения в обратном порядке

id last_name first_name birthday
6 Иванов Алексей 1993-08-05
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

Следующий урок

Урок 5. Ограничение и смещение

В этом уроке вы научитесь ограничивать итоговые результаты с помощью конструкции LIMIT и делать смещение с помощью OFFSET

Полный курс с практикой

  • 57 уроков
  • 261 задание
  • Сертификат
  • Поддержка преподавателя
  • Доступ к курсу навсегда
  • Можно в рассрочку

SQL-Урок 3. Сортировка данных (ORDER BY)

В будущем нам может понадобиться рассортировать нашу выборку – в алфавитном порядке для текста или по возрастанию/убыванию – для цифровых значений. Для таких целей в SQL имеется специальный оператор ORDER BY.

SQL оператр ORDER BY может производить сортировку как от меньшего к большему, то есть по возрастанию, так и в обратном порядке - от большего к меньшему.

1. Сортировка выбранных данных

Давайте всю нашу таблицу рассортируем по сумме реализации продукции, а именно по столбцу Amount.

Run SQLSELECT * FROM Sumproduct ORDER BY Amount 

Try it Yourself

Видим, что запрос рассортировал записи по росту в поле Amount. Обязательно нужно соблюдать последовательность расположения операторов, то есть оператор ORDER BY должен идти в самом конце запроса. В противном случае будет получено сообщение об ошибке.

Также, особенностью оператора ORDER BY является то, что он может сортировать данные по полю, которого мы не выбирали в запросе, то есть достаточно, чтобы оно вообще было в БД.

2. Сортировка по нескольким полям

Теперь посортируем наш пример дополнительно по еще одному полю. Пусть это будет поле City, отображающее место реализации продукции.

Run SQLSELECT * FROM Sumproduct ORDER BY Amount, City 

Try it Yourself

Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.

3. Направление сортировки

Несмотря на то, что по умолчанию оператор ORDER BY сортирует по возрастанию, мы можем также прописать сортировку значений по убыванию. Для этого в конце каждого поля проставляем оператор DESC (являющийся сокращением от слова DESCENDING).

Run SQLSELECT * FROM Sumproduct ORDER BY Amount DESC, City 

Try it Yourself

В данном примере, значения в поле Amount были рассортированы по убыванию, а в поле City – по возрастанию. Оператор DESC применяется только для одного столбца, поэтому при необходимости его нужно прописывать после каждого поля, принимающего участие в сортировке.

  • Изменение регистра букв в тексте
  • Сумма прописью на украинском языке
  • Поиск латиницы в кириллице и наоборот
  • Транслитерация с украинского на английский

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *