SQL 比較関数(Greatest、Least)について

2018年6月27日


ITコーディネータのシュウです。 公園_4

お久しぶりです。

<本日の題材>
比較関数について

データベースの違いによって、ある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 テーブル名;

greatest_ora

これは、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;

sqlserver_greatest

今日は以上まで

☆おすすめ情報☆☆☆
 企業様で、ExcelやAccessのシステム化を考えておられましたら、既存のExcel、Accessをそのまま使えて、大事なデータはすべてDB保存するdbSheetをおすすめいたします。

dbSheetの紹介ホームページへ
Accessでお困りの企業様は、「Access対応版が提供できるソリューション」をご覧になってみてください。

dbSheetとITを取り巻く情報に関しましては「dbSheet千夜一夜」をご覧ください。
dbSheet千夜一夜ページへ
☆☆☆・・・☆☆☆・・・☆☆☆