综合统计多张表数据是用一个sql还是多个mapper好_【自动化/测开面试集锦系列】SQL篇...

前言

每次面试必考SQL,小编这几年一直吃SQL的亏,考题无非就是万年不变学生表,看起来虽然简单,真正写出来,还是有一定难度。于是决定重新整理下关于SQL的面试题,也可以帮助更多的人过SQL这一关。

作为一个工作3年以上测试人员,不会sql基本上能拿到offer的希望渺茫,虽然平常也会用到数据库,都是用的简单的查询语句。困难一点的就直接找开发了,面试想留个好印象,还是得熟练掌握,能在纸上快速写出来。

万年不变学生表

有2张表,学生表(student)基本信息如下

2c5cf0384a364e4140e804a7dde0f451.png

科目和分数表(grade)

d6345097954ff642e5c5ced9f996615f.png

排序order by

1.查询所有学生的数学成绩,显示学生姓名name, 分数, 由高到低

SELECT a.name, b.score

FROM student a, grade b

WHERE a.id = b.id

AND kemu = '数学'

ORDER BY score

DESC

fb71c33d23aa7de1f0abba89a1fb9086.png

统计总成绩sum

2.统计每个学生的总成绩,显示字段:姓名,总成绩

SELECT a.name, sum(b.score) as sum_score

FROM student a, grade b

WHERE a.id = b.id

GROUP BY name

DESC

0f1c5403c2f272d609a3fca5d5ec1465.png

统计总成绩

3.统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生id,姓名,总成绩

SELECT a.id, a.name, c.sum_score

from student a,

(SELECT b.id, sum(b.score) as sum_score

FROM grade b

GROUP BY id

) c

WHERE a.id = c.id

ORDER BY sum_score

DESC

4cbdd38ea21082ca47ae263ebd48243c.png

统计单科最好成绩

4.列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩

第一步先group by找出单科最好成绩,作为第一张表

SELECT b.kemu, MAX(b.score)

FROM grade b

GROUP BY kemu

23b42e46167859de5b0e6171674e6c62.png

再结合学生表和分数表,得到单科最好成绩

-- 单科最好的成绩

SELECT c.id , a.name, c.kemu, c.score

FROM grade c, student a,

(SELECT b.kemu, MAX(b.score) as max_score

FROM grade b

GROUP BY kemu) t

WHERE c.kemu = t.kemu

AND c.score = t.max_score

AND a.id = c.id

3110de561710a147eabae286fa044361.png

总结 group by相关用法

函数作用支持性sum(列名)求和

max(列名)最大值

min(列名)最小值

avg(列名)平均值

first(列名)第一条记录仅Access支持last(列名)最后一条记录仅Access支持count(列名)统计记录数注意和count(*)的区别

留个问题:.列出各门课程成绩最好的2位学生, 要求显示字段: 学号,姓名, 科目,成绩

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值