SQL
# 连接
# 左连接
# 右连接
# 等值连接
# 分组
分组的需求体现在:需要按照某一个字段将数据进行分组以方便获取到一些数据,比如说使用count()算数量,还可以更进一步,比如使用获取到的数据过滤掉一些组,打个比方统开课数量>5的老师的name.
select teacher_id , count(distinct subject_id) as cnt
from Teacher
group by teacher_id
HAVING cnt >5
按照老师分组以使用count获取老师的开课数量,再根据开课数量过滤掉<=5的老师,也就是过滤掉了<=5的组
1
2
3
4
5
6
2
3
4
5
6
GROUP BY与MIN (opens new window),MAX (opens new window),AVG (opens new window),SUM (opens new window)或COUNT (opens new window)等聚合函数结合使用,以计算为每个分组提供信息的度量。 注意计算的是每个分组的
如果要在分组之前过滤行,请添加WHERE子句。过滤完行之后,需要对每个分组自己进行过滤使用HAVING
也就是说 where是用于分组前过滤行的,HAVING是用于分组后,按条件过滤掉某些分组
group by 所使用的条件字段必须在select 查询的字段中存在
group by 后接上order by 是对组的排序(不是对组内的数据,而是对所有的组),所有的组会按照order by的条件排好序
SELECT
e.department_id,
department_name,
COUNT(employee_id) headcount
FROM
employees e
INNER JOIN
departments d ON d.department_id = e.department_id
GROUP BY e.department_id
ORDER BY headcount DESC;
//更多请阅读:https://www.yiibai.com/sql/sql-group-by.html
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 排序
order by 字段 升序 加desc是降序
# 聚合函数
count(*)COUNT(*)函数返回由SELECT (opens new window)语句返回的结果集中的行数。COUNT(*)函数计算包含NULL和非NULL值的行,即:所有行。
COUNT(expression)返回不包含NULL值的行数。
MySQL COUNT(DISTINCT expression)返回不包含NULL值的唯一行数。
上次更新: 2024/08/09, 16:07:34