【MySql】查询:汇总查询

一、汇总分析
/*汇总*/
-- count()计数函数
#count(*)包含空值,count(列名)不包含空值
select count(*),count(教师名称) from teacher;
select count(姓名),COUNT(DISTINCT 姓名) from student;
select COUNT(DISTINCT 学号) from score;

-- sum()求和函数
#只能对数值类型列计算
select sum(成绩) from score;
select sum(成绩) from score where 课程号=002;

-- avg()平均值
#只能对数值类型列计算
select avg(成绩) from score;

-- max()最大值
select max(成绩) from score;

-- min()最小值
select min(成绩) from score;
二、分组 group up
/*分组*/
select 性别,count(*) from student GROUP BY 性别;
select 课程号,max(成绩) as '最高分',min(成绩) as '最低分' from score group by 课程号;
select 课程号,count(*) from score group by 课程号;
运行顺序:from --> where --> group by --> select
三、对分组结果制定条件 having
/*分组条件*/
select 性别,count(*) from student GROUP BY 性别 having count(*)>1;
select 学号,avg(成绩) as '平均分' from score group by 学号 having avg(成绩)>60;
select 学号 from score group by 学号 having count(*)>1;
select 姓名,count(*) from student group by 姓名 having count(*)>1;

运行顺序:from --> where --> group by --> having --> select

四、用SQL解决业务问题

1.步骤
a.翻译成大白话

b.写出分析思路

c.写出对应的sql语句

2.实例
问题:如何计算各科平均成绩?

思路:

a.翻译

如何计算每门课平均成绩?

b. 思路

select 查询结果 from 哪张表 where 查询条件 group by 分组依据 having 分组后的筛选条件

from 哪张表:成绩表score

where 查询条件:没有条件,对整张表查询

group by 分组依据:每门课是按照课程号分组

having 分组后的筛选条件:没有筛选,显示所有分组

select 查询结果:课程号、平均成绩-avg(成绩)

c. 语句

select 课程号,avg(成绩) from score group by 课程号;

过程:数据分组–> 函数计算 --> 组合结果

3.练习
a. 翻译

如何计算每门课的平均成绩,并且平均成绩大于等于80分

b. 思路

select 查询结果 from 哪张表 where 查询条件 group by 分组依据 having 分组后的筛选条件

from 哪张表:成绩表score

where 查询条件:没有条件,对整张表查询

group by 分组依据:每门课是按照课程号分组

having 分组后的筛选条件:将分组后的结果中,筛选出平均成绩大于等于80分

select 查询结果:课程号、平均成绩-avg(成绩)

c. 语句

/*应用业务*/
select 课程号,avg(成绩) as 平均成绩 from score GROUP BY 课程号 having avg(成绩)>=80;

过程:数据分组–> 函数计算 --> 筛选结果 -->组合结果

五、排序 order by desc asc limit
/*排序*/
#order by子句中可以使用之前定义的别名
select 课程号,avg(成绩) as 平均成绩 from score GROUP BY 课程号 having avg(成绩)>=80 order by 平均成绩 desc;
#多条件排序,按照先后语句顺序
select * from score ORDER BY 课程号,成绩 asc;
#使用有空值列排序,空值数据会在升序最大,次之空字符串
select * from teacher ORDER BY 教师名称;
#limit限制查询结果条数
select * from score limit 2;

顺序:from --> where --> group by --> having --> select --> order by --> limit

-- 练习
select 课程号 from score where 成绩<60 order by 课程号 desc;
select 课程号,avg(成绩) as 平均成绩 from score group by 课程号 order by 平均成绩 asc, 课程号 desc;
#顺序:from --> group by --> select --> order by
六、如何看报错信息
  1. 在group by 、having中使用了别名(MySQL数据库可以用别名,但是其他数据库不一定)

  2. 在where子句中使用聚合函数

-- 报错
select 课程号,count(*) from score  where count(*)>2 group by 课程号;

3.字符型类型的数字排序是按照字符串排序规则排序

七、总结

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值