お久しぶりです。
<本日の題材>
比較関数について
データベースの違いによって、あるDBでは使用できる関数が、別のDBでは使用できないケースがあります。その一例として、複数項目の最大値・最小値を取得するSQLを、今回は見てみたいと思います。
データベースがOracleの場合には、GREATEST関数・LEAST関数というのがあります。
例)金額に関する3つの項目の中から最大値を求める。具体的には
item_no | priceA | priceB | priceC |
-----------------------------------------------------
item01 | 6000 | 2000 | 3000
item02 | 1000 | 7500 | 4000
item03 | 1500 | 3000 | 8000
というテーブルがあった場合に、以下のような結果を出したいとします。
item_no | 最大値 | 最小値
------------------------------------------
item01 | 6000 | 2000
item02 | 7500 | 1000
item03 | 8000 | 1500
SQL> SELECT item_no
, GREATEST( priceA, priceB, priceC ) AS 最大値
, LEAST( priceA, priceB, priceC ) AS 最小値
FROM テーブル名;
これは、MySQLでも同様の関数があります。
GREATEST()、LEAST()
上記をSQL Serverで行おうとすると、同様の関数がないため、下記のようなSQLを実行するかたちになります。
SELECT item_no, MAX(price1) AS 最大値, MIN(price2) AS 最小値 FROM
( SELECT item_no, priceA AS price1, priceA AS price2 FROM テーブル名
UNION ALL SELECT item_no, priceB AS price1, priceB AS price2 FROM テーブル名
UNION ALL SELECT item_no, priceC AS price1, priceC AS price2 FROM テーブル名
) AS TBL
GROUP BY item_no
ORDER BY item_no;
にほんブログ村