sql 不等于符号_SQL学习(三)——聚合

c4a0235550621433d5828b4dee5682db.png

SQL书写规则

1.SQL语句以英文分号(;)结尾。

2.SQL语句不区分关键字的大小写。

3.列名不能加单引号。

4.符号只能使用英文符号。

5.SQL中列名不需要加引号,它是具有特殊含义的。

聚合group by

group by子句的作用是将数据集中的数据按一个或多个字段(也是所指定的列)进行分组,将数据有目的的进行切分。

使用group by 时有一些注意事项

  1. group by 必须要写在 where 之后。我想过这个的原因,如果说where写在group by之后,我觉得可能是对于group by之后的各个分组再进行where筛选,系统需要判断哪些数据属于哪些分组,执行效率上就比写在之前大大降低了。
  2. group by时也会将null值视作为一个独立的组。
  3. 使用聚合函数时,例如count、avg、sum、max、min,计算每个分组中的数值时,系统会忽视null值,仿佛看不见它,但是需要注意的是,count(*)函数是不会忽视null值的,因为这个函数计算的不是一列了,而是每一行,null值也属于行中。同时求和函数、求平均值函数只能对数值类型的列使用,min、max函数几乎适用所有数据类型的列。
  4. group by 子句的聚合结果是没有顺序的,分组中行的顺序随机排列。
  5. group by 分组后,select中不能书写其他除了(聚合键、聚合函数)的其他数据列,原因是每个分组中有很多行数据,系统不知道你要的是哪一行数据。(但是其实在mysql中可以书写,其他DBMS不支持这样的写法)。

练习题

找出课程编号为0002的总成绩
select sum(成绩) as 0002总成绩
       from score
       where 课程号 = "0002"

bfa02167e90614ea8d31b2e12e7a94e6.png
查询选了课程的学生人数
select count(distinct 学号)
       from score

46b1218ad3d88e39106bb09f3b41fb73.png
查询各科成绩最高和最低的分
select 课程号,
        max(成绩) as 最高成绩,
	min(成绩) as 最低成绩 
	from score
	group by 课程号

27168866101ef7e073f32ef558854e62.png
查询每门课程被选修的学生数
select 课程号,
       count(distinct 学号)		 
       from score		 
       group by 课程号

19f1143efb302562f1ee67b11dfc0a76.png
查询男生和女生数
select 性别,
       count(性别)
       from student
       group by 性别

21197767e8d9f5de20d077af30e25dc8.png
查询平均成绩大于60分学生的学号和平均成绩
select 学号,
       round(avg(成绩),2)
       from score
       group by 学号

2de8a6747c8cd352cf72de78899f8197.png
查询至少选修两门课程的学生学号
select 学号
       from score
       group by 学号
       having count(课程号)>1

76d0ebbfaa90dd9aa6e90bf2667419e7.png
查询同名同性学生名单并统计同名人数
select 姓名,
       count(姓名) as 同学数量
       from student
       group by 姓名
       having count(姓名)>1

ba3aa62e0614a6afcc7b80ee0f8ce919.png
查询不及格的课程并按课程号从大到小排列
select 课程号
       from score
       where 成绩<60
       order by 课程号 desc

f7ec336c7c028dc2e0e32edd15141d20.png
计算每门课的平均成绩,并且平均成绩大于等于80分
select 课程号,avg(成绩) as 平均成绩
       from score
       group by 课程号 
       having avg(成绩)>80

1567995eea29a43e34c16fd0b605ea72.png
查询不及格的课程并按课程号从大到小排列
select 课程号,成绩
       from score
       where 成绩<60
       order by 课程号 desc
查询每门课程平均成绩,结果按平均成绩升序排列。平均成绩相同,按课程号降序排列
select 课程号,avg(成绩)
       from score
       group by 课程号 
       order by avg(成绩),课程号 desc

c10f8d54b0f9084fd2826f6ebb3d1c7f.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值