Kodokon kodokon.com

集約:COUNT、SUM、AVG、MIN/MAX、そしてGROUP BY

集約関数とGROUP BYを使って、合計、平均、グループごとの統計を計算しましょう。

8 分 · 3 問

このレッスンを Kodokon で開く

集約関数は複数の行を入力として受け取り、単一の値を返します。合計、平均、最小値などです。最もシンプルなのはCOUNT(*)で、行を数えます。これはWHEREと自然に組み合わさります。データベースはまずフィルタリングし、それから数えます。

SQL
SELECT COUNT(*) FROM books;

SELECT COUNT(*) FROM books WHERE genre = 'sf';
合計7冊、そのうち4冊がサイエンスフィクション

他の必須の集約は列に適用されます。SUM(price)は合計し、AVG(price)は平均を計算し、MIN(year)MAX(year)は最小値と最大値を見つけます。ASキーワードはエイリアス、つまり計算された列の読みやすい名前を与えます。

SQL
SELECT SUM(price) AS total FROM books;

SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';

SELECT MIN(year), MAX(year) FROM books;
合計:52.4、sfの平均:8.375、1888と1965

では、カテゴリごとに統計を得るには? それがGROUP BYの役割です。データベースは同じ値(ここではジャンル)を共有する行をグループ化し、それから各グループに集約を適用します。結果にはグループごとに1行が含まれます。

SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf:4冊、aventure:2冊、conte:1冊

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. SELECT COUNT(*) FROM books;は何を返しますか?
    • テーブルの列の数
    • テーブルの行の数
    • すべての本のリスト
  2. 本の平均価格を計算する関数はどれですか?
    • SUM(price)
    • AVG(price)
    • MEAN(price)
    • MAX(price)
  3. SELECT genre, COUNT(*) FROM books GROUP BY genre;は何を生み出しますか?
    • 本ごとに1行、そのジャンル付き
    • 本の総数を持つ単一の行
    • ジャンルごとに1行、そのジャンルの本の数付き