ORDER BY столбец = значение desc | asc - PullRequest
1 голос
/ 23 октября 2019

Я нашел этот кусок кода некоторое время назад, и, похоже, я не нашел объяснения тому, как он действительно работает:

SELECT account_id from accounts order by account_id = 100;

Итак, я знаю, что order by [column] desc|asc делает с результатомустановлен. Но я, похоже, не могу найти объяснения для присвоения значения [column] и как это влияет на набор результатов. Это явно затронуто, но я, кажется, не могу найти образец.

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Попробуйте переписать запрос, используя явное выражение CASE в предложении ORDER BY:

SELECT account_id
FROM accounts
ORDER BY CASE WHEN account_id = 100 THEN 1 ELSE 0 END;

Вы заметите, что все записи, имеющие account_id != 100, появятся перед всеми записями, где это правда. Когда вы используете:

ORDER BY account_id = 100

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

0 голосов
/ 23 октября 2019

Postgres поддерживает логические типы, которые принимают два значения «true» и «false» (плюс, конечно, NULL). В качестве ключа order by используется логическое значение.

Выражение account_id = 100 оценивается как "true" для account_id 100 и false для других (или NULL).

Чтоэто делает? Ну, "true"> "false" и порядок возрастает. Следовательно, истинное значение упорядочено после всех других значений;account_id 100 идет в конце. Ну, не совсем конец. NULL значения являются самыми последними - они будут идти в самом конце.

Чаще всего это делается по убыванию:

order by (account_id = 100) desc

Это ставит учетную запись 100 первой в списке.

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

0 голосов
/ 23 октября 2019

В основном ORDER BY имеет два типа ASC и DESC По умолчанию это ASC

Давайте рассмотрим пример

SELECT * from Person
ORDER BY Age DESC

Приведенный выше запрос возвращает возрастлиц в порядке убывания

...