Aggregate functions は、rows の集合から 1 つの値を計算します。代表例は COUNT、SUM、AVG、MIN、MAX です。totals、averages、counts のように data を summary するために不可欠で、特に と組み合わせて使います。
Aggregate functions は、rows の集合から 1 つの値を計算します。代表例は COUNT、SUM、AVG、MIN、MAX です。totals、averages、counts のように data を summary するために不可欠で、特に と組み合わせて使います。
GROUP BYSELECT
COUNT(*) AS total_rows, -- all rows を数える
COUNT(email) AS rows_with_email, -- NON-NULL emails を数える(NULL は無視)
SUM(amount) AS total_amount, -- column の合計
AVG(price) AS average_price, -- 平均
MIN(price) AS lowest, -- 最小
MAX(price) AS highest -- 最大
FROM orders;
各 function は多くの rows を 1 つの値へ reduce します。SUM / AVG は numbers に、MIN / MAX は numbers、dates、text に使えます。COUNT は任意の値に使えます。
COUNT(*) -- NULL を含めて ALL rows を数える
COUNT(email) -- email が NOT NULL の rows だけを数える
COUNT(DISTINCT country) -- unique な non-null values を数える
COUNT(*) は all rows を数えますが、COUNT(column) はその column が not NULL の rows だけを数えます。これは subtle ですが重要です。COUNT(DISTINCT col) は unique values を数えます。
-- whole table ではなく PER GROUP で aggregate する
SELECT country, COUNT(*) AS users, AVG(age) AS avg_age
FROM users
GROUP BY country; -- country ごとに 1 result row
-- → country ごとに users 数と average age
GROUP BY がない場合、aggregate は result 全体を 1 row に summary します。GROUP BY があると、group ごとに summary row を作ります。
-- ❌ ERROR — aggregate と non-grouped column を混ぜられない
SELECT name, COUNT(*) FROM users; -- どの name? ambiguous
-- ✅ group by するか、aggregate だけを select する
SELECT country, COUNT(*) FROM users GROUP BY country;
Aggregate functions は reporting、analytics、dashboards、application logic で常に使う summary の基礎です。
COUNT(*) と COUNT(column) の違い、COUNT(DISTINCT)、そして GROUP BY との組み合わせを理解することが重要です。特に aggregate と non-grouped columns を混ぜる error はよく出ます。data を分析する SQL では必須の知識です。