[Googleスプレッドシート] QUERY関数でSQLっぽく集計する
Office※ 本記事はアフィリエイト広告(Amazonアソシエイト)を含みます。
スプレッドシートで「特定条件で絞って・並べ替えて・集計したい」とき、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