大量のデータをカテゴリ別に集計したいとき、関数の組み合わせに悩んでいる方は多いのではないでしょうか。QUERY関数を使うと、データベース言語のSQLに似た構文で簡単にグループ集計が可能です。この記事では、QUERY関数のGROUP BY句とSUM関数を使った集計方法を、具体例を交えてわかりやすく解説します。手順を覚えれば、売上集計やアンケート集計などの作業が格段に効率化されます。
【要点】QUERY関数のGROUP BYとSUMの基本を押さえる
- =QUERY(データ範囲, “SELECT カラム, SUM(数値カラム) GROUP BY カラム”): カテゴリごとに数値の合計を算出する基本構文です。GROUP BYには集計しないカラムを指定します。
- 検索条件を追加するならWHERE句: GROUP BYの前にWHERE句を入れることで、特定の行だけを対象に集計できます。
- エラーが出たときの確認ポイント: データ範囲とカラム名の指定ミス、GROUP BYに含まれないカラムのSELECTなどが主な原因です。エラーメッセージを確認して修正します。
ADVERTISEMENT
目次
QUERY関数のグループ集計の仕組みとGROUP BYの役割
QUERY関数は、指定したデータ範囲に対してSQLライクなクエリを実行し、結果を返します。GROUP BY句は、指定したカラムの値ごとに行をグループ化する命令です。たとえば、”SELECT 商品名, SUM(売上) GROUP BY 商品名”と書けば、商品名が同じ行をひとまとめにして売上の合計を計算します。SUM以外にも、COUNT(個数)、AVG(平均)、MAX(最大値)、MIN(最小値)などの集計関数と組み合わせて使えます。GROUP BYを使う際のルールは、SELECT句に指定できるカラムはGROUP BYで指定したカラムか集計関数で囲んだカラムだけという点です。これを守らないとエラーになります。
QUERY関数でGROUP BYとSUMを使う具体的な手順
ここでは、サンプルデータとして以下のような販売一覧を使います。A列に商品名、B列に売上金額が入力されていると想定します。
- 集計結果を表示するセルを選ぶ
まず、集計結果を表示したいセルをクリックします。たとえばD1セルを選択します。 - QUERY関数を入力する
選択したセルに次の数式を入力します。=QUERY(A1:B10, "SELECT A, SUM(B) GROUP BY A", 1)
第1引数にデータ範囲、第2引数にクエリ文、第3引数に見出し行の有無(1で見出しあり、0でなし)を指定します。 - Enterキーで確定する
関数を入力したらEnterキーを押します。商品名ごとに売上合計が表示されます。
この例では、A列が商品名(グループ化対象)、B列が売上金額(集計対象)です。グループ化したいカラムと集計したいカラムが適切に指定できているか確認してください。
WHERE句で条件を絞り込んでからグループ集計する
- 条件を追加する
たとえば「商品A」だけを集計したい場合、WHERE句を使います。=QUERY(A1:B10, "SELECT A, SUM(B) WHERE A='商品A' GROUP BY A", 1)
文字列の条件はシングルクォーテーションで囲みます。 - 日付や数値の条件を指定する
日付カラムがある場合、WHERE句で日付範囲を指定できます。たとえばWHERE C >= date '2024-01-01'のように書きます。
複数のカラムでグループ化する方法
- 複数のカラムをGROUP BYに指定する
カンマ区切りで複数カラムを指定します。=QUERY(A1:C10, "SELECT A, B, SUM(C) GROUP BY A, B", 1)
商品名と支店名など、2つのカテゴリでグループ化できます。 - 注意点
SELECT句にはGROUP BYで指定したカラムと集計関数のみを含めます。集計関数で使っていないカラムをSELECTに含めるとエラーになります。
QUERY関数のGROUP BYでよくあるエラーとその対処法
「GROUP BYなしで集計関数を使おうとした」エラー
SELECT句に集計関数と非集計カラムを同時に含める場合はGROUP BYが必要です。たとえばSELECT A, SUM(B)とだけ書くとエラーになります。この場合はGROUP BY Aを追加します。逆に、すべてのカラムを集計関数で囲むならGROUP BYは不要です。
「データ範囲の指定が違う」エラー
QUERY関数の第1引数で指定したデータ範囲が空だったり、列数がクエリ文のカラム数と合わないとエラーになります。データ範囲が正しいか、カラム名が実際の範囲と一致しているかを確認します。
「カラム名にスペースや特殊文字が含まれる」エラー
カラム名にスペースがある場合、クエリ文内ではバッククォート(`)で囲みます。たとえば「商品 名」というカラム名なら`商品 名`と書きます。または、クエリ文内でCol1、Col2のように列番号で指定する方法もあります。
「日付や数値の比較がうまくいかない」問題
日付カラムを文字列として比較すると正しく動かない場合があります。日付リテラルはdate 'YYYY-MM-DD'の形式で指定します。数値はそのまま数字で書くか、数値リテラルとして値と書きます。
ADVERTISEMENT
QUERY関数のGROUP BYとSUMを使う他の方法との比較
| 方法 | メリット | デメリット |
|---|---|---|
| QUERY関数(GROUP BY) | SQLに近い構文で柔軟に集計できる。WHERE句で条件指定もしやすい。 | クエリ文法を覚える必要がある。エラーが出ると原因がわかりにくい。 |
| ピボットテーブル | ドラッグ&ドロップで直感的に集計できる。集計方法の変更が簡単。 | 元データを更新しても自動反映されない場合がある。数式としてセルに残らない。 |
| SUMIF関数(複数条件) | シンプルな条件集計に適している。単一条件ならSUMIF、複数条件ならSUMIFSを使う。 | グループ化が複数カラムになると数式が複雑になる。集計項目が増えると管理が大変。 |
まとめ
QUERY関数とGROUP BY句、SUM関数の組み合わせを使えば、商品カテゴリや支店別の売上合計を数秒で算出できます。この記事で紹介した基本構文=QUERY(範囲, "SELECT グループ列, SUM(数値列) GROUP BY グループ列")を覚えれば、さまざまな集計業務に応用可能です。さらに、WHERE句で条件を絞ったり、ORDER BYで並び替えたりすることで、より高度な分析も行えます。まずは実際のデータで試してみて、QUERY関数の便利さを実感してください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
