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

参数说明

参数 说明
expression1, expression2, ... 未包含在聚合函数内的表达式,必须包含在 GROUP BY 子句中
aggregate_function 聚合函数,如 SUMCOUNTMINMAXAVG
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
相关推荐
阳光宅男@李光熠1 小时前
【电子通识】PCB外观检查机AVI(Automated Visual Inspection)
笔记·学习
凤城老人1 小时前
基于 Flask 的企业级 CMS 架构设计与实现
后端·python·flask
所念皆星海9111 小时前
Python学习---DAY10函数
开发语言·python·学习
wy200203141 小时前
小机构怎么新增学习能力项目
学习
zcn1261 小时前
不同列or运算优化经验
数据库·sql优化改写
旖旎夜光1 小时前
【LangChain实战】LangChain 学习笔记(一):从定义大模型到工具调用
人工智能·笔记·python·学习·langchain
大梦想家a2 小时前
基于 Spring Boot 的物流运单管理系统后端设计与实现(JWT + MyBatis-Plus + MySQL)
spring boot·mysql·mybatis
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt
ZYJCSZKJ3 小时前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库