三、SQL汇总分析

261 阅读3分钟

1、常见汇总函数

1)count:用于求某列的行数

SELECT COUNT(教师姓名)  -- 输出结果不包括Null值
from teacher;

image.png

2)sum/avg:用于求某列数据的和/平均数

注意:sum/avg只能对数值类型的列计算

SELECT sum(成绩)  -- sum/avg只能对数值类型的列计算
FROM score;

image.png

SELECT avg(成绩)  -- 返回成绩列的平均值
from score;

image.png

3)max/min:求最大值/最小值

SELECT max(成绩),min(成绩)  -- 查找成绩列中的最大值和最小值
from score;

image.png

2、group by 分组

SELECT 性别,count(*)  --运行顺序:先运行第2~4行,最后运行第1行
from student
where 出生日期>'1990-01-01'
group by 性别;  --设置的字段不用双引号

image.png

3、having 对分组结果指定条件

查询的格式:
select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件 -- 运行顺序:先运行2~5行,再运行第1行

实例: 查询平均成绩大于60分的学生的学号和平均成绩

SELECT 学号,avg(成绩)
from score
group by 学号
having avg(成绩)>60;

image.png

4、 order by 对查询结果排序

select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件
order by 对查询结果排序

-- 关键字默认按照升序对记录进行排序,也可以使用升序(asc)降序(desc) 进行指定 -- 运行顺序:先运行2~5行,再运行第1行,最后运行order by

使用技巧: 1.SQL可指定多个排序列名,这种情况下先按第一个列进行排序,当第一个列中有多个相同值时,再按第二个列的顺序进行排序。
2.当用于排序的列中存在空值时,空值会排在前面,可借此观察该列的空值情况

5、limit 从查询结果中取出指定行

select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件

order by 对查询结果排序 -- 升序asc,降序desc
limit 从查询结果中取出指定行

-- 运行顺序:先运行2~5行,再运行第1行,最后运行第6、7行

SELECT *
from score
limit 2; -- 2指的是只返回前两行的数据

image.png

6、常见错误信息

1)在where里面使用了select里的别名

SELECT 课程号,avg(成绩) as 平均成绩
from score
where 平均成绩>=80
ORDER BY avg(成绩) asc,课程号 desc;

错误原因:where子句执行的时候,select子句尚未执行,因此无法进行正常识别

2)在where中使用了聚合函数

SELECT 性别,count(*)
from student
where count(*)
GROUP BY 性别;

错误原因:聚合函数在where子句中无效;其余例子还有sum/avg/max/min;但是在对分组结果指定条件时,是可以使用聚合函数的

补充: sql语句中where和having的区别 “where” 是一个约束声明,使用Where来约束来数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。 “Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。