按 CASE 表达式排序

ORDER BY 子句可包括 CASE 表达式来指定排序键。

在下列示例中,表 tab_case 的列 a_col 为 INT 类型。对表 tab_case 的查询包括 Projection 列表中的列 a_col 和聚集表达式 SUM(a_col),并通过 a_col 的值将结果分组。ORDER BY 子句指定两个排序键:
  • 紧跟在 ORDER BY 关键字之后的 CASE 表达式
  • AVG(a_col) 聚集表达式:
CREATE TABLE tab_case(a_col INT, b_col VARCHAR(32));

SELECT  a_col, SUM(a_col) 
   FROM tab_case 
   GROUP BY a_col 
   ORDER BY CASE 
               WHEN a_col IS NULL 
                  THEN 1 
               ELSE 0 END ASC, 
            AVG(a_col);
 
在此,ASC 关键字显式地将 CASE 表达式的结果标识为升序排序键。在缺省情况下,AVG(a_col) 排序键也指定升序排序。

在下列类似的示例中,基于同一 tab_case 表上的查询,第二个 CASE 表达式返回或者 1 或者 0 作为返回的 AVG(a_col) 聚集值的排序键值。

SELECT  a_col, SUM(a_col) 
   FROM tab_case GROUP BY a_col 
   ORDER BY CASE
               WHEN a_col IS NULL 
                  THEN 1 
               ELSE 0 END ASC,
            AVG(a_col), 
            CASE 
               WHEN AVG(a_col) IS NULL 
                  THEN 1 
               ELSE 0 END;