[Googleスプレッドシート] QUERY関数でSQLっぽく集計する

Office

※ 本記事はアフィリエイト広告(Amazonアソシエイト)を含みます。

[Googleスプレッドシート] QUERY関数でSQLっぽく集計する

スプレッドシートで「特定条件で絞って・並べ替えて・集計したい」とき、QUERY 関数を使うと SQL っぽい書き方で一発でできます。VLOOKUP やフィルタを重ねるより見通しが良いです。

基本構文

=QUERY(データ範囲, "クエリ文字列", ヘッダー行数)

クエリ文字列は SQL に似た構文。列は A,B,C… の列文字で指定します。

=QUERY(A1:D, "select A, B where C > 100 order by B desc", 1)

「A列とB列を、C列が100より大きい行だけ、B列の降順で」という意味です。第3引数の 1 はヘッダー行数。

よく使うやつ

絞り込み(where)

=QUERY(A1:D, "select * where B = 'tech'", 1)

文字列はシングルクォートで囲みます。

集計(group by)

=QUERY(A1:D, "select B, sum(D) group by B", 1)

「B(カテゴリ)ごとに D(金額)を合計」。count(), avg(), max(), min() も使えます。

並べ替え+件数制限

=QUERY(A1:D, "select A, D order by D desc limit 5", 1)

上位5件(ランキング)。

セルの値を条件に埋め込む

検索キーをセル(例: F1)から渡したいときは、文字列連結します。

=QUERY(A1:D, "select * where B = '"&F1&"'", 1)

数値なら クォート不要:

=QUERY(A1:D, "select * where D > "&F1, 1)

ハマりどころ・メモ

  • 列は A,B の列文字で指定(select 名前 のような列名ではない)。
  • 文字列の条件はシングルクォート、数値はクォートなし
  • 日付は where E > date '2024-01-01' のように date キーワードを付ける。
  • 列に文字と数値が混在していると、QUERY が型を推測して片方を空にすることがある。その場合は元データの型を揃えるか、format 句で調整する。

複数の関数を重ねていた集計が QUERY 1本にまとまることが多く、保守がぐっと楽になります。

GoogleSpreadsheet