SQL 指南書集 目次 - ray88’s diary
SQL 列持ち→行持ちへの変換(UNION ALL) - ray88’s diary
■SQLでは複数行の中から最大値、最小値を求めることは容易だが、
複数列の中から最大値・最小値を選ぶにはどのようにしたらよいか?
【お題】
以下のテーブルのx・y・z列の数値の中から最大値を取得する
【考察】
一旦 UNION ALLで列持ち→行持ちに変換してみる
SELECT key, 'x' as temp,x AS col FROM Greatests UNION ALL SELECT key,'y' AS temp,y AS col FROM Greatests UNION ALL SELECT key, 'z' AS temp,z AS col FROM Greatests;
【回答】
/* 行持ちに変換してMAX 関数(p.287) */ SELECT key, MAX(col) AS greatest FROM (SELECT key, x AS col FROM Greatests UNION ALL SELECT key, y AS col FROM Greatests UNION ALL SELECT key, z AS col FROM Greatests) TMP GROUP BY key;
【参考】テーブル作成用SQL
CREATE TABLE Greatests (key CHAR(1) PRIMARY KEY, x INTEGER NOT NULL, y INTEGER NOT NULL, z INTEGER NOT NULL); INSERT INTO Greatests VALUES('A', 1, 2, 3); INSERT INTO Greatests VALUES('B', 5, 5, 2); INSERT INTO Greatests VALUES('C', 4, 7, 1); INSERT INTO Greatests VALUES('D', 3, 3, 8);