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