DenisOgr
@DenisOgr
Developer

Отличие ORDER by 1 от ORDER by IF(somefield='foobar', 1,0)?

В чем отличие
SELECT name, name2 FROM table 
ORDER by  1


от
SELECT name, name2 FROM table 
ORDER by  IF(name='denis', 1,0)


Первый пример сортирует по первому списку из селект а второй забивает на сортировку, если name=denis и ставит строку в начало(это так в документации и в примерах) Но почему? Если пройдет IF то будет 1 ?
  • Вопрос задан
  • 6155 просмотров
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
select fieldname /*, ... */ from tablename order by 1

Это сокращённый вариант
select fieldname /*, ... */ from tablename order by fieldname

Цифра указывает на порядковый номер поля в этом селекте. Синтаксис как сами заметили неочевидный, так что лучше не использовать.

ORDER by IF(name='denis', 1,0) , как и любое другое выражение - это вычисление условия или выражение и сортировка по результату этого выражения.
Эквивалент
select IF(name='denis', 1,0) as sortfield, /*fields*/ from tablename order by sortfield
Ответ написан
gbg
@gbg
Любые ответы на любые вопросы
Все логично. Второй order нацелен на столбец, в котором 1 стоит только там, где условие выполнено, а на остальных местах стоит ноль. Сортировка по этому столбцу приводит к очевидному всплытию этой строки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы