PostgreSQL从入门到进阶
🏠 首页
  • 开始学习

    • PostgreSQL介绍
    • 安装配置
  • 基础教程

    • 数据库与表
    • 数据类型
    • CRUD操作
    • WHERE条件
  • 进阶查询

    • 联表查询
    • 聚合函数
    • 子查询
    • 视图
  • 性能优化

    • 索引优化
    • 查询优化
    • EXPLAIN分析
  • 事务处理
  • 触发器
  • 存储过程
  • JSON数据
  • 博客系统
  • 用户管理系统
  • 最佳实践
🔗 编程指南
🏠 首页
  • 开始学习

    • PostgreSQL介绍
    • 安装配置
  • 基础教程

    • 数据库与表
    • 数据类型
    • CRUD操作
    • WHERE条件
  • 进阶查询

    • 联表查询
    • 聚合函数
    • 子查询
    • 视图
  • 性能优化

    • 索引优化
    • 查询优化
    • EXPLAIN分析
  • 事务处理
  • 触发器
  • 存储过程
  • JSON数据
  • 博客系统
  • 用户管理系统
  • 最佳实践
🔗 编程指南
  • 开始之前

    • 教程介绍
    • 什么是PostgreSQL?
    • 安装PostgreSQL
  • 基础入门

    • 数据库和表的概念
    • 数据类型详解
    • 增删改查操作(CRUD)
    • 查询条件WHERE
  • 进阶查询

    • 多表联查JOIN
    • 聚合函数
    • 子查询
    • 视图VIEW
  • 性能优化

    • 索引详解
    • 查询优化
    • 执行计划分析
  • 高级特性

    • 事务处理
    • 触发器
    • 存储过程
    • JSON数据
  • 实战项目

    • 实战项目:博客系统
    • 实战项目:用户管理系统
    • 最佳实践

聚合函数

嗨!我是长安。今天学习聚合函数,它们能帮你统计、分析数据!

🎯 什么是聚合函数?

聚合函数把多行数据聚合成一个结果:

  • 📊 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;

📚 下一步

掌握了聚合函数,你可以进行各种数据分析了!

继续学习子查询吧!


长安的话:聚合函数是数据分析的基础,多练习就能熟练掌握!💪

最近更新: 2025/12/1 18:21
Prev
多表联查JOIN
Next
子查询