SQL入門 STEP9|集計関数を使ってみよう

karin@taishi@felmia

データをまとめて調べてみよう

ここまでの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
-----
8

COUNT(*)は、テーブルにあるレコードの件数を数えています。

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を確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました