目次
今回の記事はSnowflakeというよりはSQLの検証記事になります。
group by句で指定したカラムに変換を加えるとどうなるか、という記事があまり見受けられなかったので検証してみました。
シナリオとしては、「都道府県ごとの集計したいのに北海道が1つ東海道になってるー!?」です。
今回は特にオブジェクトが不要な検証なので、values句を使用して行セットを作成しています。
https://docs.snowflake.com/ja/sql-reference/constructs/values

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

SQLの実行順序でselect句よりgroup by句が先に実行されるため、「北海道」が4、「東海道」が1として集計されたのち、「東海道」が「北海道」に変換されます。
したがって同じ「北海道」でもレコードが割れる結果になります。

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

select句のvalues.$1は集計でなければgroup by句にもないですと怒られました。
初心者のころよく見たエラーです。
.png?width=770&height=328&name=%E7%9C%9F%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E9%9B%86%E8%A8%88(group%20by%E5%8F%A5%E3%81%A7%E6%95%B0%E5%AD%97%E3%82%92%E4%BD%BF%E3%81%86%E3%82%B1%E3%83%BC%E3%82%B9).png)
group by句にカラム名を使用するケースと変わらず、想定通りの結果になります。
.png?width=769&height=305&name=%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E9%9B%86%E8%A8%88(group%20by%E5%8F%A5%E3%81%A7%E6%95%B0%E5%AD%97%E3%82%92%E4%BD%BF%E3%81%86%E3%82%B1%E3%83%BC%E3%82%B9).png)
こちらの結果は予想外でした。
group by句が先に実行されるため、「北海道」と「東海道」を分けてグループ化しその後に変換する「select句で変換」と同じ結果になると予想していました。
上記の結果は以下が考えられると思います。
詳しいところはわかりませんが、意図した挙動でクエリを書くため他にも気になる点は検証していこうと思います。
RECOMMEND こちらの記事も人気です。