---
title: 【SQL】Snowflakeを使ってgroup byの挙動確認
description: 本記事は、Snowflakeを利用したSQLの検証記事です。今回は、group by句にまつわる挙動を確認していきます。
---

[Snowflake Knowledge - INSIGHT LAB](https://knowledge.insight-lab.co.jp/snowflake)

# [【SQL】Snowflakeを使ってgroup byの挙動確認](https://knowledge.insight-lab.co.jp/snowflake/-sql-group-by-operation-check)

 作成者: [bird](https://knowledge.insight-lab.co.jp/snowflake/author/bird)｜2023年5月10日

## はじめに

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

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

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

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

[https://docs.snowflake.com/ja/sql-reference/constructs/values](https://docs.snowflake.com/ja/sql-reference/constructs/values)

## 検証

### そのまま集計

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

### select句で変換

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

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

### select句とgroup by句で変換

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

### group by句で変換

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

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

### そのまま集計（group by句に数字を使うケース）

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

### select句で変換（group by句に数字を使うケース）

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

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

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

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

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

[完全な記事を表示](https://knowledge.insight-lab.co.jp/snowflake/-sql-group-by-operation-check)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "bird"
  },
  "dateModified" : "2023-05-10T04:04:10.057Z",
  "datePublished" : "2023-05-10T04:04:09Z",
  "headline" : "【SQL】Snowflakeを使ってgroup byの挙動確認",
  "image" : {
    "@type" : "ImageObject",
    "height" : 660,
    "url" : "https://download.insight-lab.co.jp/hubfs/Snowflake/Shiratori/%E3%80%90SQL%E3%80%91Group%20By%E3%81%AE%E6%8C%99%E5%8B%95%E7%A2%BA%E8%AA%8D/%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97.png",
    "width" : 1102
  },
  "mainEntityOfPage" : "https://knowledge.insight-lab.co.jp/snowflake/-sql-group-by-operation-check",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "snowflakeナレッジ"
  }
}
```