聚合函数
嗨!我是长安。今天学习聚合函数,它们能帮你统计、分析数据!
🎯 什么是聚合函数?
聚合函数把多行数据聚合成一个结果:
- 📊 COUNT():数数
- ➕ SUM():求和
- 📈 AVG():平均值
- ⬆️ MAX():最大值
- ⬇️ MIN():最小值
📝 常用聚合函数
COUNT - 计数
-- 统计总数
SELECT COUNT(*) FROM users;
-- 统计非NULL的数量
SELECT COUNT(email) FROM users;
-- 统计不重复的数量
SELECT COUNT(DISTINCT city) FROM users;
SUM - 求和
-- 总销售额
SELECT SUM(price) FROM orders;
-- 某个用户的总消费
SELECT SUM(amount) FROM orders WHERE user_id = 1;
AVG - 平均值
-- 平均价格
SELECT AVG(price) FROM products;
-- 平均评分
SELECT AVG(rating) FROM reviews;
-- 四舍五入
SELECT ROUND(AVG(price), 2) FROM products;
MAX和MIN - 最大最小值
-- 最贵的商品
SELECT MAX(price) FROM products;
-- 最便宜的商品
SELECT MIN(price) FROM products;
-- 最新的订单
SELECT MAX(created_at) FROM orders;
📊 GROUP BY - 分组
-- 按城市统计用户数
SELECT city, COUNT(*) as user_count
FROM users
GROUP BY city;
-- 按分类统计商品数和平均价格
SELECT
category,
COUNT(*) as product_count,
AVG(price) as avg_price
FROM products
GROUP BY category;
-- 多列分组
SELECT
category,
brand,
COUNT(*) as count
FROM products
GROUP BY category, brand;
🎯 HAVING - 分组后过滤
-- 找出文章数大于5的用户
SELECT
user_id,
COUNT(*) as post_count
FROM posts
GROUP BY user_id
HAVING COUNT(*) > 5;
-- WHERE在分组前过滤,HAVING在分组后过滤
SELECT
category,
AVG(price) as avg_price
FROM products
WHERE stock > 0 -- 先过滤有库存的
GROUP BY category
HAVING AVG(price) > 100; -- 再过滤平均价格>100的分类
长安提醒:WHERE用于行过滤,HAVING用于组过滤!
💡 更多聚合函数
-- STRING_AGG:字符串聚合
SELECT category, STRING_AGG(name, ', ') as products
FROM products
GROUP BY category;
-- ARRAY_AGG:数组聚合
SELECT user_id, ARRAY_AGG(title) as posts
FROM posts
GROUP BY user_id;
-- JSON聚合
SELECT category, JSON_AGG(name) as products
FROM products
GROUP BY category;
📚 下一步
掌握了聚合函数,你可以进行各种数据分析了!
继续学习子查询吧!
长安的话:聚合函数是数据分析的基础,多练习就能熟练掌握!💪