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
相关推荐
woniu_maggie9 小时前
SAP MDG主数据治理实战:从架构原理到项目实施全解析
后端
狗凯之家源码网9 小时前
纯 PHP+MySQL 应用市场系统源码实测!
开发语言·mysql·php
xiaoqiMikko9 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
数据技术说9 小时前
数据库缓存架构深度解析:命中率、一致性、多层缓存管理
数据库·架构
Initialize293089 小时前
告警一条接一条刷屏?五步治理告警风暴
运维
帷幕落秋9 小时前
Docker镜像加速
运维·docker
工程师小爱9 小时前
电芯尺寸合格,不等于电池包尺寸合格
后端
帷幕落秋9 小时前
Docker原理-理论基础
运维·docker
有毒的教程9 小时前
Linux底层存储路由配
linux·运维·网络