Задать вопрос
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 ?
  • Вопрос задан
  • 6544 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Решения вопроса 2
Melkij
@Melkij
DBA для вашего PostgreSQL?
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 стоит только там, где условие выполнено, а на остальных местах стоит ноль. Сортировка по этому столбцу приводит к очевидному всплытию этой строки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы