Excelで数万行の売上データを集計しようとして、画面がフリーズしてしまったことはありませんか? 電卓を叩いて平均値を計算しているけれど、データが増えるたびに計算し直すのが面倒…。
そんな悩みは、BigQueryのSUM(合計)関数とAVG(平均)関数を使えば一瞬で解決します。数百万行、数千万行といった、Excelでは扱いきれない膨大なデータであっても、わずか数秒で正確な答えを導き出すことができます。
この記事を読み終える頃には、あなたは「データの山」から必要な数字を瞬時に計算できるようになっているはずです。
学習をスムーズに進めるために
自分のBigQuery環境で実際に手を動かしながら学ぶと、習得スピードが格段に上がります。
まずは『サンプルデータ取込手順』を参考に、準備を済ませておきましょう!
1. SUM/AVG関数とは
実務において「バラバラのデータを1つにまとめる」作業の基本となるのが、この2つの関数です。
SUM(サム)関数は「指定した列の数値をすべて足し合わせる(合計)」機能、AVG(アベレージ)関数は「指定した列の数値の平均を出す」機能です。日々の業務では、次のような「現状を数字で正確に把握する」シーンで欠かせません。
これらをマスターすることで、大量の領収書を電卓で叩く手間を、SQLがすべて肩代わりしてくれます。
2.基本的な書き方
SUM/AVG関数の書き方は非常にシンプルです。
SELECT
SUM(列名),
AVG(列名)
FROM
`プロジェクト名.データセット名.テーブル名`;
3. サンプルデータによる実践
それでは、実際のデータを使って計算してみましょう。
サンプルデータの『sales(売上履歴)』を使って実際に集計してみましょう。
【使用するテーブル:sales(全データ)】

3-1.購入商品の「合計数量」と「平均数量」を算出してみる
指定列の合計数量を算出するにはSUM関数、
指定列の平均数量を算出するにはAVG関数を使用します。
quantity(購入数量)を関数に指定し、それぞれの数量を算出します。
SELECT
SUM(quantity) AS total_qty,
AVG(quantity) AS average_qty
FROM
`test.sales`;
このコードでは、quantity(購入数量) という列を対象に、合計と平均を計算するように指示しています。
3-2.実行結果

この実行結果は、売上テーブルにある全行の数量をすべて足し合わせると「36個」になり、1行あたりの平均は約「1.7個」であることを示しています。
・集計関数は「数値」の列にしか使えません
・SUMやAVGは「足し算」を行う機能なので、日付(sale_date)や商品ID(product_id)のような文字ベースの列に使うとエラーになります
・必ず「価格」や「数量」といった数値が入っている列に対して使いましょう
3-3. 視覚化(図解フロー)
関数が裏側でどのようにデータを処理しているのか、イメージを確認しましょう。
縦に並んだ「列」のデータが、関数の処理によって1つの結果に吸い込まれていく様子を表現しています。

このように、「縦に長い明細(行)」をギュッと絞って「1つの結論」に変えるのが集計関数の動きになります。
この「凝縮される」感覚を掴むことが、SQL上達の第一歩です。
4. つまずきポイント・注意点
便利な関数ですが、データの状態によっては思わぬ集計ミスにつながることがあります。特に「何も入力されていない場所」の扱いに注意が必要です。
4-1. 初心者がハマる「空欄(NULL)」の罠
もし、数量の列に値が入っていない「空欄(NULL)」があった場合、計算結果はどうなるでしょうか?
・空欄(NULL)は平均の「分母」に含まれません
・SUMやAVGは、空欄(NULL)の行を完全に無視して計算します
特に注意が必要なのはAVG(平均)です。
例えば、3行のデータがあり、数量が「2個、4個、空欄(NULL)」だった場合、AVGは(2+4)÷2で「3個」を返します。
本来3行で割るべきところを、データがある2行だけで割ってしまうため、平均値が本来より高く出てしまいます。
解決策として、「空欄(NULL)を0(数値)として扱う」方法があります。
その場合、IFNULL(quantity, 0) という命令を使って、空欄(NULL)を0(数値)に置き換えることできます。
空欄(NULL)を0(数値)として扱うことで、関数から無視されず、計算に含めることができます。
5. 実務で役立つ「+α」の使い方
基本を押さえたら、現場の効率をさらに高めるテクニックを取り入れましょう。
5-1. 関数同士を組み合わせて「新しい指標」を出す
実務では、単に合計を出すだけでなく、「合計 ÷ 合計」といった計算で、テーブルに存在しない指標を算出したい場面があります。
例えば、「1顧客あたり平均で何個の商品を買っているか?」を出したい場合、単なるAVGではなく、以下のようにも書けます。
SELECT
SUM(quantity) / COUNT(DISTINCT customer_id) AS items_per_customer
FROM
`test.sales`;
ここでは、「全商品の合計(SUM)」÷「ユニークな顧客数(COUNT DISTINCT)」を行っています。
このように関数同士を算術記号(/ や *)でつなぐことで、Excelで複数のセルをまたいで計算していた作業が、SQLの1行で完結します。
6. まとめ
お疲れ様です!いかがでしたか?
膨大なデータをたった数文字の命令でまとめられるSQLのパワーを実感いただけたでしょうか。
Excelの範囲指定ミスに怯える日々は、もうおしまいです!
最初は難しく感じるかもしれませんが、一度覚えてしまえば一生モノの武器になります。
・合計はSUM、平均はAVG と即答できる
・数値以外の列(名前や日付など)に集計関数を使っていないか確認できる
・平均を出す際、空欄の行が無視されるリスクを理解している
まずは今日学んだコードを、手元のサンプルデータで一度叩いてみてください!
「文法はわかった。でも、実務でミスをするのがまだ怖い……」という方へ
➡ 【独学の限界?】SQL学習で「あと一歩」が進まない時の処方箋