お問い合わせ
2 分で読むことができます

【SQL】Snowflakeを使ってgroup byの挙動確認

執筆者 bird 更新日時 2023年5月10日

Topics: SQL snowflake
【SQL】Snowflakeを使ってgroup byの挙動確認

目次

はじめに

今回の記事はSnowflakeというよりはSQLの検証記事になります。

group by句で指定したカラムに変換を加えるとどうなるか、という記事があまり見受けられなかったので検証してみました。

シナリオとしては、「都道府県ごとの集計したいのに北海道が1つ東海道になってるー!?」です。

今回は特にオブジェクトが不要な検証なので、values句を使用して行セットを作成しています。

https://docs.snowflake.com/ja/sql-reference/constructs/values

検証

そのまま集計

そのまま集計

こちらは想定通りの結果になります。

select句で変換

select句で東海道を北海道に変換

SQLの実行順序でselect句よりgroup by句が先に実行されるため、「北海道」が4、「東海道」が1として集計されたのち、「東海道」が「北海道」に変換されます。

したがって同じ「北海道」でもレコードが割れる結果になります。

select句とgroup by句で変換

select句とgroup by句で変換

group by句でグループ化する際に変換を加えることで、レコードが割れない結果になります。

group by句で変換

group by句で変換

select句のvalues.$1は集計でなければgroup by句にもないですと怒られました。

初心者のころよく見たエラーです。

そのまま集計(group by句に数字を使うケース)

真そのまま集計(group by句で数字を使うケース)

group by句にカラム名を使用するケースと変わらず、想定通りの結果になります。

select句で変換(group by句に数字を使うケース)

そのまま集計(group by句で数字を使うケース)

こちらの結果は予想外でした。

group by句が先に実行されるため、「北海道」と「東海道」を分けてグループ化しその後に変換する「select句で変換」と同じ結果になると予想していました。

上記の結果は以下が考えられると思います。

  1. group by句で数字を使用する場合、select句を参照している
  2. group by句で数字を使用する場合、実行の順序が変わる(ありえなそう)

詳しいところはわかりませんが、意図した挙動でクエリを書くため他にも気になる点は検証していこうと思います。

Snowflakeを体験してみませんか?

INSIGHT LABではSnowflake紹介セミナーを定期開催しています。Snowflakeの製品紹介だけでなく、デモンストレーションを通してSnowflakeのシンプルなUI操作や処理パフォーマンスの高さを体感いただけます。

詳細はこちら

bird

執筆者 bird

4 分で読むことができます。
Snowflakeの料金体系|クレジットと費用最適化のポイントをご紹介
5 分で読むことができます。
【禁断の比較?】SnowflakeとTreasure Dataを比べてみました
1 分で読むことができます。
誤ってupdateしてしまったレコードをtime travelで復元する
5 分で読むことができます。
【Snowflake】新機能「Streamlit in Snowflake」とは何者か!?
3 分で読むことができます。
AWS Lambdaを使ってSnowflakeとSFTPサーバーを連携してみた