次のようなテーブル名 Scoreで4行の其々最大のレコードを取得したいとき。
Score
x | y | z |
1 | 2 | 3 |
1 | 2 | 2 |
3 | 3 | 3 |
5 | 4 | 2 |
単純な比較の場合は、簡単な記述で済む
SELECT CASE WHEN x < y THEN y
ELSE x END AS maxmum
FROM Score;
しかしながら、複数で比較が発生する場合は些か記載が面倒になる
SELECT CASE WHEN CASE WHEN x < y THEN y
ELSE x END < z THEN z
ELSE CASE WHEN x < y THEN y
ELSE x END END AS maxmum
FROM Score;
4つでの比較になると、更に2回記述が増えるので、非常に見難い。
三つ巴までが使用限界と思う。
テーブル内に処理番号、日付、店舗ごとの管理連番、を格納している社内DBで、
年度ごとの店舗ごとの処理件数の合計をカウントでなく、管理連番の最大値の合計を
取得したかった。
受付時、受付受理時、一次納品、二次納品、三次納品、納品完了
このようなステージごとに管理しているが、
一次~三次納品は一括りで数値が欲しかったため、
複数のcaseが必要になった。
力技で一行づつ比較となるので、
レコード数が重いと結構負荷がかかるようだ。