mysql 专业笔记 -- 第 14 章:GROUP BY

参数说明

参数 说明
expression1, expression2, ... 未包含在聚合函数内的表达式,必须包含在 GROUP BY 子句中
aggregate_function 聚合函数,如 SUM、COUNT、MIN、MAX 或 AVG
tables 要从中检索记录的表。FROM 子句中必须至少列出一个表
WHERE conditions 可选。必须满足的条件,满足条件的记录才会被选中

第 14.1 节:使用 HAVING 的 GROUP BY

sql 复制代码
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

使用 GROUP BY ... HAVING 来过滤聚合记录,类似于使用 SELECT ... WHERE 来过滤单个记录。

你也可以写成 HAVING Man_Power >= 10,因为 HAVING 能识别"别名"。

第 14.2 节:使用 GROUP_CONCAT 的 GROUP BY

GROUP_CONCAT 用于获取每组中表达式的连接值,当某列对应多行结果时使用。例如,每个姓名对应多个分数:

表 Grade:

Name Score
Adam A+
Adam A-
Adam B
Adam C+
Bill D-
John A-
sql 复制代码
SELECT Name, GROUP_CONCAT(Score ORDER BY Score DESC SEPARATOR ' ') AS Grades
FROM Grade
GROUP BY Name;

结果:

图片占位符

复制代码
+------+------------------+
| Name | Grades           |
+------+------------------+
| Adam | A+ A- B C+       |
| Bill | D-               |
| John | A-               |
+------+------------------+

第 14.3 节:使用 MIN 函数的 GROUP BY

假设有一个员工表,每行包含员工的姓名、部门和薪水。

sql 复制代码
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;

这将告诉你哪个部门的员工薪水最低,以及该薪水是多少。要找出每个部门中薪水最低的员工姓名,则是一个不同的问题,超出了本示例的范围。请参见"分组最大值"。

第 14.4 节:带聚合函数的 GROUP BY

表 ORDERS

(原文图片占位,此处构造示例数据)

假设 orders 表结构如下:

customer total items
Bob 1300 20
Bob 800 11
Carly 1000 10
Carly 800 5
Fred 600 3
Jenny 200 2
Tess 11500 50
Tess 2500 8
SUM

返回数值列的总和。

例如,每个客户的总订单金额和总商品数:

sql 复制代码
SELECT customer, SUM(total) AS sum_total, SUM(items) AS sum_items
FROM orders
GROUP BY customer
ORDER BY customer;

结果:

customer sum_total sum_items
Bob 2100 31
Carly 1800 15
Fred 600 3
Jenny 200 2
Tess 14000 58
AVG

返回数值列的平均值。

例如,每个客户的平均订单金额:

sql 复制代码
SELECT customer, AVG(total) AS avg_total
FROM orders
GROUP BY customer
ORDER BY customer;

结果:

customer avg_total
Bob 1050
Carly 900
Fred 600
Jenny 200
Tess 7000
MAX

返回某列或表达式的最大值。

例如,每个客户的最高订单总金额:

sql 复制代码
SELECT customer, MAX(total) AS max_total
FROM orders
GROUP BY customer
ORDER BY customer;

结果:

customer max_total
Bob 1300
Carly 1000
Fred 600
Jenny 200
Tess 11500
MIN

返回某列或表达式的最小值。

例如,每个客户的最低订单总金额:

sql 复制代码
SELECT customer, MIN(total) AS min_total
FROM orders
GROUP BY customer
ORDER BY customer;

结果:

customer min_total
Bob 800
Carly 800
Fred 600
Jenny 200
Tess 2500
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
小白男神4 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql