【QUERY関数】GROUP BY句で項目別集計!複数条件も

GoogleスプレッドシートのQUERY関数を使うと、大量のデータから必要な情報だけを抽出したり、並べ替えたり、集計したりと、さまざまなデータ操作を行うことができます。この記事ではデータをグループ別に集計できる、「GROUP BY句」について解説しているので、ぜひ参考にしてみてください。

スポンサーリンク

QUERY関数とは?おさらい

【QUERY関数】GROUP BY句で項目別集計!複数条件も

QUERY関数を使うと、クエリ(データに対する「処理・命令」)や、関数を組み合わせることで、さまざまな方法でデータを抽出できます。

中でも、QUERY関数を使う上で最も基本となるのが、SELECT句です。この句は「どの列を抽出するか」を指示するために使用します。

たとえば、データ範囲から「C列、B列」を記載の順番で抽出したい場合、数式は以下のようになります。

例:=QUERY(A2:C5,"SELECT C, B ")

QUERY関数の引数:(データ, クエリ, [見出し])

スポンサーリンク

GROUP BY句で項目別に集計する方法

GROUP BY句は、特定の列の項目別に数値を集計したい場合に利用します。まず指定した項目(列)でデータをグループに分け、そのグループ内で、集計したい列に対してSUM関数などの集計関数を適用します。

GROUP BY句で項目別に合計する方法(SUM関数)

【QUERY関数】GROUP BY句で項目別集計!複数条件も

特定の列の項目別に数値を合計したい場合、まずSELECT句で「グループ化する列」と「SUM関数を使って合計する列」を指定します。その後GROUP BY句に、SELECT句で指定した「グループ化したい列」を記述します。

たとえば、「商品名」別に「個数」を合計したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT B,sum(C) GROUP BY B")

GROUP BY句で1行目が空白になる理由

【QUERY関数】GROUP BY句で項目別集計!複数条件も

QUERY関数は、データ範囲の最初の行を「見出し」として認識しようとする特性があります。そのため、GROUP BY句を使う場合にデータ範囲に「見出し」を含めていないと、集計結果のヘッダーが空白になったり、意図しない表示になったりすることがあります。

その他の主な集計関数

SUM関数のほかに、GROUP BY句と組み合わせて使える集計関数は以下のとおりです。

  • COUNT(): グループ内のデータの個数を数えます。
  • AVG(): グループ内の数値の平均値を算出します。
  • MAX(): グループ内の数値の最大値を抽出します。
  • MIN(): グループ内の数値の最小値を抽出します。
スポンサーリンク

GROUP BY句を複数条件にする方法

複数の集計関数を指定する

【QUERY関数】GROUP BY句で項目別集計!複数条件も

GROUP BY句で複数の関数を使いたい場合、それぞれ関数をカンマ(,)で区切って記述します。

たとえば、「商品名」別に、「個数の合計」と「個数の最大値」を同時に算出したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT B,sum(C),max(C) GROUP BY B")

複数の列(項目)を指定する

【QUERY関数】GROUP BY句で項目別集計!複数条件も

GROUP BY句で複数の項目を基準として集計したい場合、それぞれの列をカンマ(,)で区切って記述します。このとき、SELECT句にもグループ化の基準となるすべての列を含めます。

たとえば、「日付」と「商品名」別に、「個数」を合計したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT A,B,sum(C) GROUP BY A,B")

スポンサーリンク

グループ化する項目から空白を削除する方法

【QUERY関数】GROUP BY句で項目別集計!複数条件も

GROUP BY句でクループ化する項目から、空のセルを除外したい場合は、WHERE句で「空白以外(is not null」の条件を付け加えます。

たとえば、「商品名」別に「個数」を合計し、さらに商品名が空白の行を除外したい場合、数式は次のようになります。

例:=QUERY(A1:C,"SELECT B,sum(C) WHERE B is not null GROUP BY B")

スポンサーリンク

日付や期間でグループ化する方法

GROUP BY句で「年別」や「月別」、の集計をしたい場合、YEAR関数やMONTH関数といった日付関数を、SELECT句とGROUP BY句の両方で使う必要があります。

年別にグループ化する(YEAR関数)

【QUERY関数】GROUP BY句で項目別集計!複数条件も

特定の列の「年」ごとにデータを集計したい場合、YEAR関数を使用します。

たとえば、日付の「年」別に個数を合計したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT YEAR(A), SUM(C) GROUP BY YEAR(A)")

月別にグループ化する(MONTH関数)

【QUERY関数】GROUP BY句で項目別集計!複数条件も

特定の列の「月」ごとにデータを集計したい場合、MONTH関数を使用します。

たとえば、日付の「月」別に個数を合計したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT MONTH(A)+1, SUM(C) GROUP BY MONTH(A)+1")

ポイント: MONTH関数は、月を1月=0として数えます。そのため、「1月、2月…」という表記に合わせるには、MONTH(A)+1のように1を足す必要があります。

「年月」でグループ化する方法

【QUERY関数】GROUP BY句で項目別集計!複数条件も

「年」と「月」の組み合わせごとにデータを集計したい場合は、YEAR関数とMONTH関数を両方使ってグループ化します。

たとえば、日付の「年月」別に個数を合計したい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT YEAR(A), MONTH(A)+1, SUM(C) GROUP BY YEAR(A), MONTH(A)+1")

その他の日付関数

GROUP BY句で使える日付関数には、他にも以下のようなものがあります。

HOUR関数: 時刻の「時間」ごとにグループ化します。

QUARTER関数: 四半期(1から4)ごとにグループ化します。

DAY関数: 月の何日か(1から31)ごとにグループ化します。

DAYOFWEEK関数: 曜日の数字(日曜日が1、土曜日が7)ごとにグループ化します。

スポンサーリンク

見出しを変更する方法(LABEL句)

【QUERY関数】GROUP BY句で項目別集計!複数条件も

GROUP BY句で集計したデータの見出しは、「sum 列名」のように自動で生成されます。これを分かりやすい名前に変更したい場合に、LABEL句を使用します。

LABEL句では、変更したい対象の「列」(または集計関数)と、それに付けたい新しい「見出し名」を記述します。

たとえば、「商品名」と「sum 個数」のデータがあるときに、「sum 個数」の見出しを「個数」にしたい場合、数式は次のようになります。

例:=QUERY(A1:C5,"SELECT B, sum(C) GROUP BY B LABEL sum(C) '個数'")

複数の見出しを変更する場合

複数の列の見出しを変更したい場合は、それぞれをカンマ(,)で区切って記述します。

例:LABEL B '商品名', sum(C) '個数'

スポンサーリンク

QUERY関数のその他のクエリ

今回はGROUP BY句を中心に解説しましたが、QUERY関数で使えるクエリには、他にも以下のようなものがあります。

  • SELECT: 特定の列を指定した順序で抽出します。(詳細記事はこちら
  • WHERE: 指定した条件を満たすデータのみを抽出します。(詳細記事はこちら
  • GROUP BY: 指定した列の同じ要素ごとにデータを集計します。(この記事で解説)
  • PIVOT: GROUP BYで集計したデータに分類要素を追加し、表の形式を変換します。(詳細記事はこちら
  • ORDER BY: データを特定の列の値で並べ替えます。(詳細記事はこちら
  • LIMIT: 抽出する行数を指定した数に制限します。(詳細記事はこちら
  • OFFSET: 指定した数の最初の行をスキップします。(詳細記事はこちら
  • LABEL: 抽出した列のヘッダー名を任意の名前に変更します。(この記事で解説)
  • FORMAT: 特定の列の日付や数値などの表示形式を設定します。(詳細記事はこちら
  • OPTIONS: ヘッダーの行数や特定の書式設定を適用しないなどの追加オプションを設定します。
タイトルとURLをコピーしました