ORDER BY列=值desc | asc

时间:2019-10-23 09:39:02

标签: sql postgresql sql-order-by

我前段时间找到了这段代码,但似乎没有找到有关其真正工作原理的任何解释:

SELECT account_id from accounts order by account_id = 100;

因此,我知道order by [column] desc|asc对结果集的作用。但是我似乎找不到为[column]赋值以及如何影响结果集的解释。它显然受到影响,但我似乎找不到任何模式。

3 个答案:

答案 0 :(得分:1)

尝试在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

然后,您要按布尔等式本身进行排序。因此,当 not 为true时,它将评估为零,为true时,它将评估为1。

答案 1 :(得分:0)

基本上ORDER BY有两种类型ASCDESC 默认情况下为ASC

让我们举个例子

SELECT * from Person
ORDER BY Age DESC

以上查询返回降序排列的人的年龄

答案 2 :(得分:0)

Postgres支持布尔类型,它们具有两个值“ true”和“ false”(当然加上NULL)。布尔值用作order by键。

表达式account_id = 100对account_id 100的求值为“ true”,对其他表达式(或NULL)的求值为false。

这是做什么的?好吧,“ true”>“ false”,并且顺序是递增的。因此,真实值在所有其他值之后 排序; account_id 100在末尾。嗯,还没结束。 NULL值是最新的-它们将在最后使用。

通常,这是通过降序进行的:

order by (account_id = 100) desc

这会将帐户100首先排在列表中。

注意:在这种情况下,我将表达式放在括号中以明确表明意图实际上是根据表达式排序。也就是说,没有错字。