我前段时间找到了这段代码,但似乎没有找到有关其真正工作原理的任何解释:
SELECT account_id from accounts order by account_id = 100;
因此,我知道order by [column] desc|asc
对结果集的作用。但是我似乎找不到为[column]
赋值以及如何影响结果集的解释。它显然受到影响,但我似乎找不到任何模式。
答案 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
有两种类型ASC
和DESC
默认情况下为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首先排在列表中。
注意:在这种情况下,我将表达式放在括号中以明确表明意图实际上是根据表达式排序。也就是说,没有错字。