導入
SELECT は基本「行の数だけ結果が出る」操作でした。集計関数は逆に、何行あっても答えは1行。列全体をまとめて「合計・平均・最大…」を計算します。
説明
COUNT のように、複数行を1つの値へまとめる関数を 集計関数 と呼びます。代表は5つです。
flowchart LR
T["products の price 列<br/>3200・1500・24800・128000・5400・800・6800"]
T -->|"SUM"| S["合計 170500"]
T -->|"AVG"| A["平均 24357"]
T -->|"MAX"| MX["最大 128000"]
T -->|"MIN"| MN["最小 800"]
T -->|"COUNT"| C["件数 7"]
| 関数 | 意味 |
|---|---|
COUNT(*) | 行数(件数) |
SUM(列) | 合計 |
AVG(列) | 平均 |
MIN(列) | 最小 |
MAX(列) | 最大 |
AS を使うと結果の列に分かりやすい名前(別名)を付けられます。
SELECT COUNT(*) AS 件数, SUM(price) AS 合計, AVG(price) AS 平均 FROM products;
WHERE と組み合わせれば、「条件に合う行だけ」を集計できます。たとえば「周辺機器(category_id = 1)の商品の平均価格」はこうです。
SELECT AVG(price) AS 平均 FROM products WHERE category_id = 1;
NULL は数えないという点だけ注意してください。COUNT(*) は全行を数えますが、COUNT(列) はその列が NULL の行を除いて数えます。SUM・AVG なども NULL を無視して計算します。
やってみよう
初期表示のクエリを実行し、商品の件数・平均価格・最高額が1行にまとまって出ることを確認しましょう。次に SELECT MIN(price), MAX(price) FROM products; で最安値と最高値も出してみてください。
演習
orders テーブルの注文件数を、COUNT(*) を使って 注文数 という別名で取り出してください。
ヒント1を見る
件数は COUNT(*)、別名は AS 注文数 です。
ヒント2を見る
SELECT COUNT(*) AS 注文数 FROM orders;