我遇到了一个带有ORDER BY子句的SQL语句,我无法理解。
SELECT ...
FROM ...
WHERE ...
JOIN ...
ORDER BY (
CASE
WHEN versions.effective_date IS NULL THEN
1
ELSE
0
END) DESC,
versions.effective_date DESC,
versions.name DESC,
versions.id DESC
请指出ORDER BY子句的含义。谢谢。
答案 0 :(得分:2)
<强>插图:强>
假设原始数据是这样订购的
effective_date, effective_date, name, id
3/1/2010 3/1/2010 ABC 1
1/1/2010 1/1/2010 ABC 2
2/1/2010 2/1/2010 ABC 3
NULL NULL ABC 4
NULL NULL ABC 5
NULL NULL ABC 6
订购后
effective_date, effective_date, name, id
NULL NULL ABC 6
NULL NULL ABC 5
NULL NULL ABC 4
3/1/2010 3/1/2010 ABC 1
2/1/2010 2/1/2010 ABC 3
1/1/2010 1/1/2010 ABC 2
翻译[如何在运行时翻译订单声明]:
effective_date, effective_date, name, id
1 NULL ABC 6
1 NULL ABC 5
1 NULL ABC 4
0 3/1/2010 ABC 1
0 2/1/2010 ABC 3
0 1/1/2010 ABC 2
答案 1 :(得分:0)
ORDER BY(如果versions.effective_date为NULL,则为1,则为0结束)DESC
如果versions.effective_date
不可用(NULL
),则这些记录将为 listed at last
。所有其他记录(NOT NULL
)将显示在 top of the list
。
答案 2 :(得分:0)
case子句只是一个条件的额外顺序,生效日期为null的每一行都有值1,其他行的值为0.排序首先在该列上发生,降序。
答案 3 :(得分:0)
它会将versions.effective_date IS NULL的所有行放在列表的顶部。
基本上它将结果分成两个主要部分
此case expression
类似于Excel中的IF()函数
= IF(logical-test,value-if-true,value-if-false)
CASE
WHEN versions.effective_date IS NULL -- the logical test
1 -- value if true
else 0 -- value if false
END
答案 4 :(得分:0)
您的结果将以这种方式订购
effective_date
为空且当时显示的结果
有effective_date
effective_date
,则请将其排序
将返回具有更长日期的记录的降序方式