Ordering by a CASE expression
The ORDER BY clause can include CASE expressions to specify a sorting key.
In the following example, column a_col of
table tab_case is of type INT. The query on table tab_case includes
both column a_col and the aggregate expression SUM(a_col) in
the Projection list, and groups the results by the value of a_col.
The ORDER BY clause specifies two sorting keys:
- A CASE expression that immediately follows the ORDER BY keywords
- The AVG(a_col) aggregate expression:
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);Here the ASC keyword explicitly identifies the result of the CASE expression as an ascending sort key. By default, the AVG(a_col) sorting key also specifies an ascending order.
In the following similar example, based on a query on the same tab_case table, a second CASE expression returns either 1 or 0 as the sorting key value for the returned AVG(a_col) aggregate values.
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;