SQL入門 STEP9|集計関数を使ってみよう
データをまとめて調べてみよう
ここまでのSTEPでは、商品データを1件ずつ取得したり、条件に合う商品だけを探したりしてきました。
では、次のようなことを調べたい場合はどうでしょうか。
「商品は全部で何件ある?」
「商品の平均価格はいくら?」
「一番高い商品はいくら?」
もちろんSELECTですべての商品を表示して、自分で数えたり計算したりすることもできます。
ですが、商品が何百件もあったら大変ですね。
SQLには、こうした計算をしてくれる集計関数があります。
集計関数とは?
複数のデータをまとめて計算するときに使う関数です。
例えば、
- データの件数を数える
- 合計を求める
- 平均を求める
- 最大値・最小値を調べる
といったことができます。
今回は、よく使う5つの集計関数を実際に使ってみましょう。
| 集計関数 | できること |
|---|---|
COUNT | 件数を数える |
SUM | 合計を求める |
AVG | 平均を求める |
MAX | 最大値を求める |
MIN | 最小値を求める |

商品の数や平均価格も、SQLに計算してもらえるんだね♪
COUNTで商品の件数を数えてみよう
まずは、productsテーブルに商品が何件登録されているのか調べてみます。
件数を数えるときはCOUNTを使います。
Query Toolで次のSQLを実行してください。
SELECT COUNT(*)
FROM products;STEP8まで記事どおりに進めていれば、商品ID1~8の8件が残っています。
そのため、結果は次のようになります。
count
-----
8COUNT(*)は、テーブルにあるレコードの件数を数えています。
COUNT(*)
SELECT COUNT(*)
FROM products;productsテーブルに何件のデータがあるのかを数えます。
商品の数だけでなく、
「ユーザーが何人いるか」
「注文が何件あるか」
などを調べるときにも使えます。
WHEREとCOUNTを組み合わせてみよう
集計関数は、これまで学んだWHEREと一緒に使うこともできます。
例えば、
「5000円以上の商品はいくつある?」
を調べてみましょう。
SELECT COUNT(*)
FROM products
WHERE price >= 5000;WHEREによって5000円以上の商品に絞り込み、その件数をCOUNTで数えています。
このように、これまで覚えてきたSQLと集計関数を組み合わせることができます。

WHEREで商品を絞ってから、その数をCOUNTで数えているんだね!
SUMで価格の合計を求めてみよう
次は、商品の価格をすべて合計してみます。
合計を求めるときはSUMを使います。
SELECT SUM(price)
FROM products;SUMの()の中には、合計したいカラムを指定します。
今回は、
SUM(price)なので、priceに入っている値を合計しています。
基本的な形は、
SUM(カラム名)です。
例えば注文金額を保存しているテーブルなら、注文金額の合計を求めるときにも使えます。
AVGで平均価格を求めてみよう
商品の平均価格を知りたいときはAVGを使います。
AVGは「average(平均)」から来ています。
SELECT AVG(price)
FROM products;実行すると、productsに登録されている商品の平均価格が表示されます。
結果を見て、
「思ったより桁数が多いな」
と感じることがあるかもしれません。
PostgreSQLでは、平均を計算した結果が小数を含む形で表示されることがあります。
今は表示される桁数を調整することより、
AVG(price)でpriceの平均を求められる
ことを覚えておけば大丈夫です。
MAXで一番高い価格を調べてみよう
一番大きな値を調べるときはMAXを使います。
今回は商品の中で一番高い価格を調べてみます。
SELECT MAX(price)
FROM products;実行すると、
max
------
120000と表示されます。
現在の商品では、ノートPCの120000円が一番高いためです。
ただし、ここで少し注意があります。
このSQLで取得しているのは、あくまで一番高い価格です。
「一番高い商品の商品名」まで取得しているわけではありません。
MAX(price)で分かるのは最大の価格
SELECT MAX(price)
FROM products;このSQLで分かるのは、
120000という最大値です。
「120000円の商品は何という商品なのか」まで取得しているわけではありません。
今はまず、MAXは最大値を求める関数と覚えておきましょう。
MINで一番安い価格を調べてみよう
反対に、一番小さな値を調べるときはMINを使います。
SELECT MIN(price)
FROM products;現在のデータでは、最も安い商品の価格が表示されます。
MAXとMINはセットで考えると分かりやすいですね。
MAX → 最大値
MIN → 最小値
MAXは一番大きい値、MINは一番小さい値!
これは名前からもイメージしやすいね♪
5つの集計関数を整理しよう
ここまで使った集計関数を、一度並べてみましょう。
COUNT(*) -- 件数
SUM(price) -- 合計
AVG(price) -- 平均
MAX(price) -- 最大値
MIN(price) -- 最小値最初からすべて暗記する必要はありません。
「平均を出したいからAVGだったな」
くらいに思い出せれば十分です。
実際にSQLを書いているうちに、よく使うものは自然と覚えていきます。
一度に複数の集計結果を取得してみよう
集計関数は、一つずつ使わなければいけないわけではありません。
複数の結果をまとめて取得することもできます。
SELECT
COUNT(*),
SUM(price),
AVG(price),
MAX(price),
MIN(price)
FROM products;これを実行すると、
- 商品数
- 価格の合計
- 平均価格
- 最高価格
- 最低価格
を一度に確認できます。
SELECTで複数のカラムを指定したときと同じように、,で区切っています。
結果の名前を分かりやすくしてみよう
先ほどのSQLを実行すると、結果のカラム名は、
count | sum | avg | max | minのように表示されます。
意味は分かりますが、SQLが少し複雑になってくると「この結果は何だったかな?」となることがあります。
そんなときは、ASを使って結果に分かりやすい名前を付けることができます。
SELECT
COUNT(*) AS product_count,
SUM(price) AS total_price,
AVG(price) AS average_price,
MAX(price) AS max_price,
MIN(price) AS min_price
FROM products;実行すると、結果のカラム名が、
product_count
total_price
average_price
max_price
min_priceのように分かりやすくなります。
このように、ASを使って一時的に付ける名前を別名(エイリアス)と呼びます。
ASで分かりやすい名前を付ける
COUNT(*) AS product_countと書くと、COUNTの結果をproduct_countという名前で表示できます。
テーブルのカラム名そのものが変更されるわけではありません。
あくまで、今回のSELECT結果に付ける名前です。
ASはこの先のSQLでも使うので、ここで一度触れておきましょう。
WHEREと集計関数をもう一度組み合わせてみよう
今度は、
「10000円以下の商品の平均価格」
を求めてみます。
SELECT AVG(price) AS average_price
FROM products
WHERE price <= 10000;このSQLでは、まずWHEREで10000円以下の商品を対象にしています。
その商品だけを使ってAVGが計算されます。
つまり、
WHEREで対象を絞る → 集計する
という使い方です。
SELECT、WHERE、集計関数が少しずつつながってきましたね。
COUNT(*)とCOUNT(カラム名)の違い
COUNTには、
COUNT(*)だけでなく、
COUNT(price)のような書き方もあります。
この2つは、NULLという「値が入っていない状態」があると結果が変わることがあります。
COUNT(*)はレコードそのものを数えます。
一方、COUNT(price)は、priceに値が入っているレコードを数えます。
今のproductsではすべての商品に価格が入っているので、どちらを使っても同じ件数になります。
最初はCOUNT(*)を基本にしよう
データの件数を調べたい場合は、
COUNT(*)を使えばOKです。
NULLについては、必要になったところで詳しく学んでいきましょう。
よくある間違い
SUMやAVGにカラムを指定していない
SUMやAVGでは、どの値を計算するのか指定します。
SUM(price)
AVG(price)のように、()の中に対象となるカラムを書きます。
MAXで商品名まで取得できると思ってしまう
SELECT MAX(price)
FROM products;で取得できるのは最大の価格です。
一番高い商品の名前まで一緒に取得しているわけではありません。
まずは、
MAX → 最大値を求める
と考えましょう。
ASを使うと元のカラム名が変わると思ってしまう
AVG(price) AS average_priceと書いても、productsテーブルにaverage_priceというカラムが作られるわけではありません。
SELECTの結果を見やすくするために付けている名前です。
STEP9のまとめ
STEP9のポイント
- 集計関数を使うと複数のデータをまとめて計算できる
COUNTは件数を数えるSUMは合計を求めるAVGは平均を求めるMAXは最大値を求めるMINは最小値を求める- WHEREで対象を絞ってから集計することもできる
ASを使うと結果に分かりやすい名前を付けられる
集計関数を使えるようになると、データを1件ずつ見るだけではなく、テーブル全体の特徴を数字で確認できるようになります。
COUNT、SUM、AVG、MAX、MINを一度に覚える必要はありません。
必要になったときに、
「件数だからCOUNT」
「平均だからAVG」
と選べるようになれば十分です。

STEP9クリア!
たくさんのデータも、SQLにまとめて計算してもらえるようになったね♪
次のSTEPへ
今回はproductsテーブル全体や、WHEREで絞り込んだデータをまとめて集計しました。
ですが実際には、
「カテゴリーごとの商品数を知りたい」
「カテゴリーごとの平均価格を出したい」
といった集計をしたいこともあります。
次のSTEPでは、練習用データを少し広げながら、GROUP BYを使ってグループごとに集計する方法を学びます。
→ STEP10「GROUP BYでグループごとに集計しよう」
学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。
