【MySQL】集計関数の基本(SUM・MIN・MAX・AVG)

今回はMySQLの集計関数を使ってあるグループの合計値や平均値を求めるなどといった方法について解説していきたいと思います。

基本的なSELECT文の使い方についてはこちらを参照してください。

【MySQL】SELECT文とWHERE句による条件指定の基本まとめ

集計関数の使い方

合計値を求める(SUM)

特定のカラムの合計値を求めるにはSUM関数を使います。

SELECT SUM(price) AS price FROM purchase_histories;

上記の場合は、itemsテーブルの全ての行のpriceの合計値が出力されますが、特定の条件にマッチするものだけを合計したい場合はWHERE句と組み合わせます。

SELECT SUM(price) AS price FROM purchase_histories WHERE item_name = '商品A';
MEMO
「SUM(price)」のあとに「AS price」というエイリアスをつけていますが、つけなくても合計値は出力されます。ただし、出力結果が表示される際にカラム名が「SUM(price)」になってしまうため、明示的にpriceにしています。

平均値を求める(AVG)

次に、平均値を求める場合にはAVG関数を使います。書き方自体はSUM関数と同様なので簡単です。

SELECT AVG(price) AS price FROM purchase_histories;

最大値と最小値を求める(MAX, MIN)

最後に最大値と最小値を求める場合は、MAX関数とMIN関数を使います。

SELECT MAX(price), MIN(price) FROM purchase_histories;

ちなみに日付に関しても同様にMAXやMIN関数を使えます。(これは現場でもよく使います)

SELECT MAX(purchase_date) AS last_purchase_date, MIN(purchase_date) AS first_purchase_date FROM purchase_histories;

集計の応用編

集計の応用編としてグループごとに合計値や平均などを求める場合は以下のようにGROUP BY句と併用します。

SELECT item_name, SUM(price) AS price FROM purchase_histories GROUP BY item_name;

少し複雑な例として、「各商品が2021年9月01日〜2021年09月30日で最初に売れた日」を確認したい場合は以下のように書きます。

SELECT 
    item_name, 
    MIN(purchase_date) AS first_purchase_date 
FROM 
    purchase_histories 
WHERE 
    purchase_date BETWEEN '2021-09-01' AND '2021-09-30' 
GROUP BY 
    item_name;