問題
Greatests
という仮のテーブルがあるとします。
複数列の中から、最大を選び
key | x | y | z |
---|---|---|---|
A | 1 | 2 | 3 |
B | 5 | 5 | 2 |
C | 4 | 7 | 1 |
D | 3 | 3 | 8 |
以下のような出力結果になるような SQLを書いてください。
まずは、xとy 列の2列の比較でやりましょう。
key | greatest |
---|---|
A | 2 |
B | 5 |
C | 7 |
D | 3 |
解き方の方針
CASE式の条件をx>y
とかにすればすぐできます。
SQL
SELECT
key,
CASE WHEN x > y THEN x
END y AS greatest
FROM Greatests
問題
では、比較対象をx,y,zの3列にしたらどうでしょうか?
解き方の方針
CASE式の中でCASE式を入れて比較すればOKです
SQL
SELECT
key,
CASE WHEN
CASE WHEN x > y THEN x ELSE y END < z
THEN z
ELSE
CASE WHEN x > y THEN x ELSE y END
END AS greatest
FROM Greatests
「CASE WHEN x > y THEN x ELSE y END
」というCASE式をCASE式の中に書くことで実現できます。
こんなことができるのも、CASE式の実行値が値だからこそです。
同じ容量で、列は増やせますが、可読性は落ちます。
参照
23p
アウトプット100本ノック実施中