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

QUERY関数を使うと、クエリ(データに対する「処理・命令」)や、関数を組み合わせることで、さまざまな方法でデータを抽出できます。
中でも、QUERY関数を使う上で最も基本となるのが、SELECT句です。この句は「どの列を抽出するか」を指示するために使用します。
たとえば、データ範囲から「C列、B列」を記載の順番で抽出したい場合、数式は以下のようになります。
例:=QUERY(A2:C5,"SELECT C, B ")
QUERY関数の引数:(データ, クエリ, [見出し])
GROUP BY句

GROUP BY句は、特定の列の項目別に数値を集計したい場合に利用します。まず指定した項目(列)でデータをグループに分け、そのグループ内で、集計したい列に対してSUM関数などの集計関数を適用します。
たとえば、「商品名」別に「個数」を合計したい場合、数式は次のようになります。
例:=QUERY(A1:C5,"SELECT B,sum(C) GROUP BY B")
PIVOT句の使い方
GROUP BY句と組み合わせた基本的な使い方

PIVOT句は列内の個別の値を、新しい列(見出し)に変換するために使用されます。これにより、データを縦方向から横方向へと展開し、クロス集計を実現できます。
たとえば、「A列の産地」と「B列の商品名」の交差する部分に、「C列の価格」の合計をクロス集計したい場合、数式は次のようになります。
例:=QUERY(A1:C6,"SELECT A,sum(C) GROUP BY A PIVOT B")
ポイント:PIVOT句を使用する場合は、SELECT句に指定したすべての列をGROUP BY句にも指定するか、集計関数の対象に指定する必要があります。
PIVOT句単体での挙動

GROUP BY句を使用しない場合、PIVOT句に指定した列の集計を、横方向に展開します。
たとえば、「B列の商品名」ごとの「C列の価格」の合計を集計したい場合、数式は次のようになります。
例:=QUERY(A1:C6,"SELECT sum(C) PIVOT B")
※結果は常に1行で表示されます。
複数の軸でデータを集計する
集計関数を複数使う場合

複数の集計関数を同時に使用する場合、カンマ(,
)で区切りながら「集計関数」と「集計対象の列」をセットで記入していきます。
たとえば、「B列の産地」と「C列の商品名」の交差する部分に、「D列の売上(合計と平均)」をクロス集計したい場合、数式は次のようになります。
例:=QUERY(A1:D6,"SELECT B,sum(D),avg(D) GROUP BY B PIVOT C")
GROUP BY句を複数使う場合

GROUP BY句で複数の項目を基準として集計したい場合、それぞれの列をカンマ(,
)で区切って記入します。このとき、SELECT句にもグループ化の基準となるすべての列を含めます。
たとえば、「A列の日付」と「B列の産地」を組み合わせて行のグループとし、「C列の商品名」の列の交差する部分に、「D列の売上」の合計をクロス集計したい場合、数式は次のようになります。
例:=QUERY(A1:D6,"SELECT A,B,sum(D) GROUP BY A,B PIVOT C")
PIVOT句を複数使う場合

PIVOT句で複数の項目を新しい見出しとして展開したい場合、それぞれの列をカンマ(,
)で区切って記入します。
たとえば、「A列の日付」と「C列の商品名」のそれぞれの組み合わせを新しく見出しとして展開し、「A列の産地」の行と交差する部分に「D列の売上」を合計したい場合、数式は次のようになります。
例:=QUERY(A1:D6,"SELECT B,sum(D) GROUP BY B PIVOT A,C")
QUERY関数のその他のクエリ
今回はPIVOT句を中心に解説しましたが、QUERY関数で使えるクエリには、他にも以下のようなものがあります。
SELECT
句: 特定の列を指定した順序で抽出します。(詳細記事はこちら)
WHERE
句: 指定した条件を満たすデータのみを抽出します。(詳細記事はこちら)
GROUP BY
句: 指定した列の同じ要素ごとにデータを集計します。(詳細記事はこちら)
PIVOT
句: GROUP BYで集計したデータに分類要素を追加し、表の形式を変換します。(この記事で解説)
ORDER BY
句: データを特定の列の値で並べ替えます。(詳細記事はこちら)
LIMIT
句: 抽出する行数を指定した数に制限します。(詳細記事はこちら)
OFFSET
句: 指定した数の最初の行をスキップします。(詳細記事はこちら)
LABEL
句: 抽出した列のヘッダー名を任意の名前に変更します。(詳細記事はこちら)
FORMAT
句: 特定の列の日付や数値などの表示形式を設定します。(詳細記事はこちら)
OPTIONS
句: ヘッダーの行数や特定の書式設定を適用しないなどの追加オプションを設定します。