Snowflakeさわってみた。MIN_BY / MAX_BY 集約関数【2023年1月新機能】
分析屋の下滝です。
Snowflakeをさわってみよう、の6回目です。
2023年1月リリースの新機能の一つにSQLの集約関数が追加されていたので試してみたいと思います。MIN_BY と MAX_BY 関数です。
Productテーブルに次のようなデータが格納されているとします。
+----+------+-------+
| ID | NAME | PRICE |
|----+------+-------|
| 1 | aaaa | 1000 |
| 2 | bbbb | 2000 |
| 3 | cccc | 3000 |
+----+------+-------+
MAX_BY を使うことで、PRICEの値が最も大きいIDを返すことができます。
select max_by(id, price) from product;
実行結果は以下となります。3000が最も大きいので、ID 3 が返されています。
+-------------------+
| MAX_BY(ID, PRICE) |
|-------------------|
| 3 |
+-------------------+
MAX_BYの最初の引数には、結果として返すカラムを指定します。2つ目の引数には、最大値を含むカラムを指定します。
オプションで3つ目の引数があり、何個の値を返すのかを指定することができます。試しに先程の例に2を指定してみます。
select max_by(id, price, 2) from product;
実行結果は以下となります。3000の次に大きいのが2000なので、ID 3と2が配列として返されています。
+----------------------+
| MAX_BY(ID, PRICE, 2) |
|----------------------|
| [ |
| 3, |
| 2 |
| ] |
+----------------------+
なお、NULLの値は無視されます。すべての値がNULLの場合、NULLが返されます。
priceの値をすべてNULLにしてみます。
+----+------+-------+
| ID | NAME | PRICE |
|----+------+-------|
| 1 | aaaa | NULL |
| 2 | bbbb | NULL |
| 3 | cccc | NULL |
+----+------+-------+
次のクエリを実行します。
select max_by(id, price) from product;
実行結果は次のようになります。
+-------------------+
| MAX_BY(ID, PRICE) |
|-------------------|
| NULL |
+-------------------+
priceの値をNULLが含むものにしてみます。
+----+------+-------+
| ID | NAME | PRICE |
|----+------+-------|
| 1 | aaaa | 1000 |
| 2 | bbbb | NULL |
| 3 | cccc | NULL |
+----+------+-------+
MAX_BYの3つ目の引数に2を指定してみます。
select max_by(id, price, 2) from product;
実行結果は次のようになります。配列として返されていますが、NULLは無視されています。
+----------------------+
| MAX_BY(ID, PRICE, 2) |
|----------------------|
| [ |
| 1 |
| ] |
+----------------------+
MIN_BYで実行してみます。3つ目の引数は指定しません。
select min_by(id, price) from product;
実行結果は次のようになります。NULLは無視され、最も小さい値のIDが返されています。
+-------------------+
| MIN_BY(ID, PRICE) |
|-------------------|
| 1 |
+-------------------+
関数の詳しい説明は、公式ドキュメントを参照してください。
株式会社分析屋について
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。