SQL ORDER BY子句ASC/DESC与列名顺序及排序规则疑问
问题1:ORDER BY子句中ASC、DESC关键字与列名的前后顺序是否有强制要求?
有强制语法要求,必须是列名/排序表达式在前,ASC/DESC关键字在后,顺序颠倒会直接触发语法错误。你提到的另一道习题中year写在DESC前面是符合SQL语法规范的正确写法。
问题2:练习24的解法中subject和winner都写在ASC之后,二者是否都是按升序排序?
是的,二者都是升序排序。
SQL的ORDER BY规则中,每个排序项的排序规则是独立声明的:如果某个排序项后没有显式写ASC或DESC,默认就是按升序(ASC)排序。
你给出的练习24参考解法的ORDER BY逻辑可以拆解为三层独立的排序规则,优先级从前往后依次降低,只有前一个排序项的值相等时,才会触发下一个排序项的规则:
ORDER BY -- 第一层排序:CASE表达式显式声明ASC,先把非Chemistry、Economics的条目排在前面 CASE WHEN subject IN ('Economics','Chemistry') THEN 1 ELSE 0 END ASC, -- 第二层排序:subject未声明排序方向,默认ASC,同优先级条目按学科升序排列 subject, -- 第三层排序:winner未声明排序方向,默认ASC,同科目的条目按获奖者姓名升序排列 winner;
内容的提问来源于stack exchange,提问作者user8314628
相关产品推荐
相关产品推荐

