Условие if в сортировке order by mysql

Задать вопрос

Вопрос задан

Изменён 2 года 8 месяцев назад

Просмотрен 265 раз

Подскажите пожалуйста, есть таблица:

id|user_with|user_creator|fav_user_with|fav_user_creator|
1 |   10    |     15     |      1      |        0       |
2 |   10    |     15     |      0      |        1       |
3 |   15    |     10     |      0      |        1       |
4 |   15    |     10     |      1      |        0       |
5 |   15    |     10     |      0      |        1       |

Как я могу сделать сортировку.

Если user_creator = 15 и fav_user_creator = 1 то order by fav_user_creator desc, id desc

.

Если user_with = 15 и fav_user_with = 1 то order by fav_user_with desc, id desc.

Должно получиться при первом условии:

id|user_with|user_creator|fav_user_with|fav_user_creator|
2 |   10    |     15     |      0      |        1       |
5 |   15    |     10     |      0      |        1       |
4 |   15    |     10     |      1      |        0       |
3 |   15    |     10     |      0      |        1       |
1 |   10    |     15     |      1      |        0       |

Должно получиться при втором условии:

id|user_with|user_creator|fav_user_with|fav_user_creator|
4 |   15    |     10     |      1      |        0       |
5 |   15    |     10     |      0      |        1       |
3 |   15    |     10     |      0      |        1       |
2 |   10    |     15     |      1      |        0       |
1 |   10    |     15     |      0      |        1       |

4

…
ORDER BY
  CASE
    WHEN user_creator = 15 AND fav_user_creator = 1 THEN fav_user_creator
    WHEN user_with = 15 AND fav_user_with = 1 THEN fav_user_with 
  END desc,
  id desc

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

MySQL select ORDER BY и сортировка

SQL сам по себе — язык, не предполагающий порядка вывода результатов и не гарантирующий его сохранения. Т.е. если результатов выполнения запроса 2 или более — они могут быть выведены в другом порядке при повторном выполнении запроса.

 

Это применимо и к СУБД MySQL, тем не менее есть средства для сортировки — прежде всего ключевое слово

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

 

Цикл по принципам работы с MySQL, более ранние материалы:
  1. Вводная статья цикла
  2. Начало работы с MySQL и основные команды
  3. MySQL SELECT, выборка из таблиц MySQL
  4. Регулярные выражения в MySQL
  5. MySQL SELECT: JOIN таблиц

 

 

Немного модифицируем запрос который использовался в одном из предыдущих материалов (посвященном JOIN-ам) добавив  distinct чтобы не дублировать результаты и условие по стоимости, которое готов предложить каждый потенциальный съемщик жилья.

 

SELECT distinct name FROM PEOPLE, REAL_ESTATE WHERE REAL_ESTATE.

rentorsale = PEOPLE.rentorsale and PEOPLE.PRICE > 40000;

+———-+
| name |
+———-+
| Alexandr |
| Viktor |
| Olga |
+———-+
3 rows in set (0.00 sec)

 

Чтобы было понятно сколько готов платить каждый добавим PEOPLE.price в SELECT (использование больших и маленьких букв в MySQL не принципиально, для наглядности здесь приводятся части запроса в том и другом регистре)

 

SELECT distinct name, PEOPLE.price FROM PEOPLE, REAL_ESTATE WHERE REAL_ESTATE.rentorsale = PEOPLE.rentorsale and PEOPLE.PRICE > 40000;

+———-+——-+
| name | price |
+———-+——-+
| Alexandr | 50000 |
| Viktor | 45000 |
| Olga | 50000 |
+———-+——-+
3 rows in set (0. 00 sec)

 

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

 

Сначала выведем всю информацию об элементе таблицы чтобы убедиться, что изменяться будут именно его данные

select * from PEOPLE where name = «Alexandr» and price = «50000»;

+———-+———————+——+———+———-+————+——-+
| name | profession | age | city | district | rentorsale | PRICE |
+———-+———————+——+———+———-+————+——-+
| Alexandr | ElectriacalEngineer | 28 | Moskow | Center | Rent | 50000 |


+———-+———————+——+———+———-+————+——-+
1 row in set (0.00 sec)

 

Теперь обновляем значение поля price, устанавливая его в 52000

 

update PEOPLE set price = «52000» where name = «Alexandr» and price = «50000»;

Query OK, 1 row affected (0. 01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

 

Просматриваем все ли получилось

select * from PEOPLE where name = «Alexandr» and price = «52000»;

+———-+———————+——+———+———-+————+——-+
| name | profession | age | city | district | rentorsale | PRICE |
+———-+———————+——+———+———-+————+——-+
| Alexandr | ElectriacalEngineer | 28 | Moskow | Center | Rent | 52000 |
+———-+———————+——+———+———-+————+——-+
1 row in set (0.00 sec)

 

Теперь вновь выводим три записи — значения в поле PRICE теперь разные и сортировки нет. Записи расположились по алфавиту (значения в поле name), но это поведение не гарантировано и при повторном выполнении запроса может быть другой порядок.

 

SELECT distinct name, PEOPLE. price FROM PEOPLE, REAL_ESTATE WHERE REAL_ESTATE.rentorsale = PEOPLE.rentorsale and PEOPLE.PRICE > 40000;

+———-+——-+
| name | price |
+———-+——-+
| Alexandr | 52000 |
| Viktor | 45000 |
| Olga | 50000 |
+———-+——-+
3 rows in set (0.00 sec)

 

 

MySQL select ORDER BY и сортировка значений

Зададим сортировку по цене, которую каждый готов заплатить.

SELECT distinct name, PEOPLE.price FROM PEOPLE, REAL_ESTATE WHERE REAL_ESTATE.rentorsale = PEOPLE.rentorsale and PEOPLE.PRICE > 40000 ORDER BY price;

+———-+——-+
| name | price |
+———-+——-+
| Viktor | 45000 |
| Olga | 50000 |
| Alexandr | 52000 |
+———-+——-+
3 rows in set (0. 00 sec)

 

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

 

 

SELECT distinct name, PEOPLE.price FROM PEOPLE, REAL_ESTATE WHERE REAL_ESTATE.rentorsale = PEOPLE.rentorsale and PEOPLE.PRICE > 40000 ORDER BY price desc;

+———-+——-+
| name | price |
+———-+——-+
| Alexandr | 52000 |
| Olga | 50000 |
| Viktor | 45000 |
+———-+——-+
3 rows in set (0.00 sec)

Categories: MySQL

MySQL: ORDER BY Пункт


В этом руководстве по MySQL объясняется, как использовать MySQL ORDER BY, пункт с синтаксисом и примерами.

Описание

Предложение MySQL ORDER BY используется для сортировки записей в результирующем наборе.

Синтаксис

Синтаксис предложения ORDER BY в MySQL:

 SELECT выражения
ИЗ столов
[ГДЕ условия]
ORDER BY выражение [ ASC | ДЕСК ]; 

Параметры или аргументы

выражения
Столбцы или вычисления, которые вы хотите получить.
столов
Таблицы, из которых вы хотите извлечь записи. В предложении FROM должна быть хотя бы одна таблица.
ГДЕ условия
Дополнительно. Условия, которые должны быть соблюдены для выбора записей.
АСК
Дополнительно. Он сортирует результирующий набор в порядке возрастания по выражению (по умолчанию, если не указан модификатор).
DESC
Дополнительно. Он сортирует результирующий набор в порядке убывания по выражению .

Примечание

  • Если модификатор ASC или DESC не указан в предложении ORDER BY, результаты будут отсортированы по выражению в порядке возрастания. Это эквивалентно выражению ORDER BY ASC .
  • Предложение ORDER BY может использоваться в инструкции SELECT, инструкции SELECT LIMIT и инструкции DELETE LIMIT в MySQL.

Пример — сортировка без использования атрибута ASC/DESC

Предложение MySQL ORDER BY можно использовать без указания модификатора ASC или DESC. Когда этот атрибут опущен в предложении ORDER BY, порядок сортировки по умолчанию устанавливается в ASC или в порядке возрастания.

Например:

 ВЫБЕРИТЕ город
ОТ клиентов
ГДЕ имя_клиента = «Яблоко»
ЗАКАЗАТЬ ПО ГОРОДУ; 

Этот пример MySQL ORDER BY вернет все записи, отсортированные по полю city в порядке возрастания, и будет эквивалентен следующему предложению ORDER BY:

 ВЫБЕРИТЕ город
ОТ клиентов
ГДЕ имя_клиента = «Яблоко»
ЗАКАЗАТЬ ПО ГОРОДУ АСЦ; 

Большинство программистов опускают атрибут ASC при сортировке по возрастанию.

Пример — сортировка по убыванию

При сортировке набора результатов по убыванию вы используете атрибут DESC в предложении ORDER BY следующим образом:

 SELECT last_name, first_name, city
ОТ контакты
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО ГОРОДУ DESC; 

Этот пример MySQL ORDER BY вернет все записи, отсортированные по город поле в порядке убывания.

Пример — сортировка по относительному положению

Вы также можете использовать предложение MySQL ORDER BY для сортировки по относительному положению в результирующем наборе, где первое поле в результирующем наборе — 1, следующее поле — 2 и так далее.

Например:

 ВЫБЕРИТЕ фамилию, имя, город
ОТ контакты
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО 3 DESC; 

Этот MySQL ORDER BY вернет все записи, отсортированные по полю city в порядке убывания, начиная с 9Поле 0035 city находится на позиции #3 в результирующем наборе и будет эквивалентно следующему предложению ORDER BY:

 SELECT last_name, first_name, city
ОТ контакты
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО ГОРОДУ DESC; 

Пример — использование атрибутов ASC и DESC

При сортировке результирующего набора с помощью предложения MySQL ORDER BY вы можете использовать атрибуты ASC и DESC в одном операторе SELECT.

Например:

 ВЫБЕРИТЕ город_поставщика, штат_поставщика
ОТ поставщиков
ГДЕ имя_поставщика = 'Майкрософт'
ЗАКАЗАТЬ ПО городу-поставщику DESC, штату-поставщику ASC; 

Этот MySQL ORDER BY вернет все записи, отсортированные по полю supplier_city в порядке убывания, со вторичной сортировкой по supplier_state в порядке возрастания.

Поделись:

Рекламные объявления

DESC и ASC Запрос с EXAMPLE

ByRichard Peterson

Hours

Обновлено

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

При использовании команды SELECT результаты возвращались в том же порядке, в котором записи добавлялись в базу данных. Это порядок сортировки по умолчанию. В этом разделе мы рассмотрим, как мы можем сортировать результаты нашего запроса. Сортировка — это просто переупорядочивание результатов запроса определенным образом. Сортировка может выполняться по одному столбцу или по нескольким столбцам. Это можно сделать с числовыми, строковыми и датовыми типами данных.

MySQL ORDER BY используется вместе с запросом SELECT для упорядоченной сортировки данных. Предложение MySQL ORDER BY используется для сортировки наборов результатов запроса в порядке возрастания или убывания.

 Оператор SELECT... [ГДЕ условие | ГРУППИРОВАТЬ ПО `имя_поля(я)` ИМЕЕТ условие] ORDER BY `имя_поля(я)` [ASC | ПОИСК]; 

ЗДЕСЬ

  • «Оператор SELECT…» — это обычный запрос выбора
  • » | представляет альтернативы
  • «[ГДЕ условие | GROUP BY `field_name(s)` HAVING condition” — это необязательное условие, используемое для фильтрации наборов результатов запроса.
  • «ORDER BY» выполняет сортировку набора результатов запроса
  • «[АСЦ | DESC]» — это ключевое слово, используемое для сортировки наборов результатов в порядке возрастания или убывания. Примечание ASC используется по умолчанию.

Что такое ключевые слова DESC и ASC?

. по убыванию.
ASC — это краткая форма для возрастания MySQL DESC — это краткая форма
Он используется для сортировки результатов запроса сверху вниз. Он используется для сортировки результатов запроса снизу вверх
При работе с типами данных даты самая ранняя дата отображается вверху списка. . При работе с типами дат последняя дата отображается вверху списка.
При работе с числовыми типами данных самые низкие значения отображаются вверху списка. При работе с числовыми типами данных самые высокие значения отображаются в верхней части набора результатов запроса.
При работе со строковыми типами данных набор результатов запроса сортируется от тех, которые начинаются с буквы A до буквы Z. При работе со строковыми типами данных набор результатов запроса сортируется от тех, которые начинаются с буквы Z, до буквы A.

Ключевые слова SQL DESC и ASC используются вместе с оператором SELECT и предложением MySQL ORDER BY.

Синтаксис DESC и ASC

Ключевое слово сортировки SQL DESC имеет следующий основной синтаксис.

 ВЫБЕРИТЕ {имя поля(я) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC /DESC [LIMIT N] 

HERE

  • ВЫБЕРИТЕ {имя поля(я) | *} FROM tableName(s) — это инструкция, содержащая поля и таблицы, из которых нужно получить набор результатов.
  • [ГДЕ условие] является необязательным, но может использоваться для фильтрации данных в соответствии с заданным условием.
  • ORDER BY имя(я) поля является обязательным и является полем, по которому должна выполняться сортировка. Ключевое слово MySQL DESC указывает, что сортировка должна производиться в порядке убывания.
  • [LIMIT] является необязательным, но может использоваться для ограничения количества результатов, возвращаемых из набора результатов запроса.

Примеры:

Давайте теперь рассмотрим практический пример —

 SELECT * FROM членов; 

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

 
номер членства полные_имена пол дата_рождения физический_адрес почтовый_адрес номер_контакта электронная почта
1 Джанет Джонс Женщина 21-07-1980 Первая улица Участок № 4 Частная сумка 0759 253 542 [email protected]
2 Джанет Смит Джонс Женщина 23-06-1980 Мелроуз 123 НУЛЕВОЙ НУЛЕВОЙ [email protected]
3 Роберт Фил Мужчина 07.12.1989 3-я улица 34 НУЛЕВОЙ 12345 [email protected]
4 Глория Уильямс Женщина 14-02-1984 2-я улица 23 НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
5 Леонард Хофштадтер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 845738767 НУЛЕВОЙ
6 Шелдон Купер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 976736763 НУЛЕВОЙ
7 Раджеш Кутраппали Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 938867763 НУЛЕВОЙ
8 Лесли Винкль Мужчина 14-02-1984 Вудкрест НУЛЕВОЙ 987636553 НУЛЕВОЙ
9 Говард Воловиц Мужчина 24-08-1981 Южный парк Почтовый индекс Ящик 4563 987786553

Предположим, что отдел маркетинга хочет, чтобы сведения об участниках были расположены в порядке убывания даты рождения. Это поможет им своевременно отправить поздравления с днем ​​рождения. Мы можем получить указанный список, выполнив запрос, как показано ниже:

 ВЫБЕРИТЕ * ИЗ участников ORDER BY date_of_birth DESC; 

Выполнение вышеуказанного скрипта в рабочей среде MySQL для базы данных myflixdb дает нам следующие результаты, показанные ниже.

Тот же запрос в порядке возрастания

ВЫБРАТЬ * ИЗ членов ORDER BY date_of_birth ASC

Примечание. Значения NULL означают отсутствие значений (не ноль или пустая строка). Обратите внимание на то, как они были отсортированы.

Дополнительные примеры

Рассмотрим следующую сортировку SQL по сценарию, в котором перечислены все записи членов.

 SELECT * FROM `участники`; 

Выполнение приведенного выше сценария дает следующие результаты, показанные ниже.

 
номер членства полные_имена пол дата_рождения физический_адрес почтовый_адрес номер_контакта электронная почта
1 Джанет Джонс Женщина 21-07-1980 Первая улица Участок № 4 Частная сумка 0759 253 542 [email protected] cm
2 Джанет Смит Джонс Женщина 23-06-1980 Мелроуз 123 НУЛЕВОЙ НУЛЕВОЙ [email protected]
3 Роберт Фил Мужчина 07.12.1989 3-я улица 34 НУЛЕВОЙ 12345 [email protected]
4 Глория Уильямс Женщина 14-02-1984 2-я улица 23 НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
5 Леонард Хофштадтер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 845738767 НУЛЕВОЙ
6 Шелдон Купер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 976736763 НУЛЕВОЙ
7 Раджеш Кутраппали Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 938867763 НУЛЕВОЙ
8 Лесли Винкль Мужчина 14-02-1984 Вудкрест НУЛЕВОЙ 987636553 НУЛЕВОЙ
9 Говард Воловиц Мужчина 24-08-1981 Южный парк Почтовый индекс Ящик 4563 987786553 НУЛЕВОЙ

Предположим, мы хотим получить список, который сортирует набор результатов запроса с использованием поля «пол», мы будем использовать скрипт, показанный ниже.

 SELECT * FROM `members` ORDER BY `пол`; 
 
номер членства полные_имена пол дата_рождения физический_адрес почтовый_адрес номер_контакта электронная почта
1 Джанет Джонс Женщина 21-07-1980 Первая улица Участок № 4 Частная сумка 0759 253 542 [email protected]
2 Джанет Смит Джонс Женщина 23-06-1980 Мелроуз 123 НУЛЕВОЙ НУЛЕВОЙ [email protected]
4 Глория Уильямс Женщина 14-02-1984 2-я улица 23 НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
3 Роберт Фил Мужчина 07.12.1989 3-я улица 34 НУЛЕВОЙ 12345 [email protected] com
5 Леонард Хофштадтер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 845738767 НУЛЕВОЙ
6 Шелдон Купер Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 976736763 НУЛЕВОЙ
7 Раджеш Кутраппали Мужчина НУЛЕВОЙ Вудкрест НУЛЕВОЙ 938867763 НУЛЕВОЙ
8 Лесли Винкль Самец 14-02-1984 Вудкрест НУЛЕВОЙ 987636553 НУЛЕВОЙ
9 Говард Воловиц Мужчина 24-08-1981 Южный парк Почтовый индекс Ящик 4563 987786553 НУЛЕВОЙ

Члены «женщины» отображаются первыми, а затем члены «мужчины», потому что, когда используется предложение ORDER BY DESC без указания ключевого слова ASC или MySQL DESC, по умолчанию MySQL сортирует набор результатов запроса в порядке возрастания.

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

 SELECT * FROM `члены` ORDER BY `пол`,`дата_рождения` DESC; 

Выполнение вышеуказанного скрипта в рабочей среде MySQL для базы данных myflixdb дает следующие результаты.

Столбец пола был отсортирован в порядке возрастания по умолчанию, тогда как столбец даты рождения был отсортирован в порядке убывания явным образом

Почему мы можем использовать DESC и ASC?

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

DESC в SQL — это ключевое слово, которое пригодится в таких ситуациях. Мы можем написать запрос, который сортирует список в порядке убывания, используя дату платежа.

Предположим, что отдел маркетинга хочет получить список фильмов по категориям, который участники могут использовать, чтобы решить, какие фильмы доступны в библиотеке при аренде фильмов, не будет ли логичнее отсортировать названия категорий фильмов и названия по возрастанию так что участники могут быстро найти информацию из списка?

Ключевое слово ASC пригодится в таких ситуациях; мы можем получить список фильмов, отсортированных по названию категории и названию фильма в порядке возрастания.

Сводка

  • Сортировка результатов запроса — это переупорядочение строк, возвращаемых из набора результатов запроса, в порядке возрастания или убывания.
  • Ключевое слово DESC в SQL используется для сортировки набора результатов запроса в порядке убывания.
  • Ключевое слово ASC используется для сортировки набора результатов запроса в порядке возрастания.