我有一个“名”两列的表:姓氏,FIRST_NAME什么是“序”的意义在ORDER BY子句CASE条件
last_name first_name
--------- ----------
Basu Rohini
Khan Amartya
Nandy Upanita
Ghosh Shankha
NULL Claire
NULL Amelie
当我这样做(第1 SQL):
SELECT last_name, first_name FROM names
ORDER BY
CASE
WHEN last_name IS NOT NULL THEN 3
ELSE 100
END,
last_name DESC
我得到的输出:
last_name first_name
--------- ----------
Nandy Upanita
Khan Amartya
Ghosh Shankha
Basu Rohini
NULL Amelie
NULL Claire
但是,当我这样做(第2 SQL):
SELECT last_name, first_name from names
ORDER BY
CASE
WHEN last_name IS NOT NULL THEN 3
END,
last_name DESC
还是这个(第三SQL):
SELECT last_name, first_name from names
ORDER BY
CASE
WHEN last_name IS NOT NULL THEN 100
ELSE 3
END,
last_name DESC
我得到的输出开始姓氏为升序排列NULL和FIRST_NAME,然后按照从大到小的顺序非空last_names:
last_name first_name
--------- ----------
NULL Amelie
NULL Claire
Nandy Upanita
Khan Amartya
Ghosh Shankha
Basu Rohini
我的问题:
为什么第一个SQL给last_name的输出按降序排列,对于非空姓?
为什么我在第一个SQL'CASE WHEN last_name IS NOT NULL THEN 3'中说'ORDER BY子句中的表达式3和last_name是相同'没有出错?
为什么我能在CASE语句下给出像3和100这样的随机数?按照SQL标准,这个数字只能是任何直到列数的非负整数值。 CASE语句中的整数如何工作?
不,那些3和100只是这里使用的整数值 - 不是序数位置! 3在100之前,即空名称之前的非空名称。 – jarlh
您的大小写表达式对非空名称返回3,对空名称返回100。按该值排序!!! – jarlh
是的,我现在明白了。谢谢:) – riyaB