关于面试总结2-SQL学生表
前言
接着上一篇https://www.cnblogs.com/yoyoketang/p/10065424.html,继续学生表SQL
- 1.计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩
- 2.计算每个人的成绩,总分数,平均分,要求显示:学号,姓名,语文,数学,英语,总分,平均分
- 3.列出各门课程的平均成绩,要求显示字段:课程,平均成绩
- 4.列出数学成绩的排名, 要求显示字段:学号,姓名,成绩,排名
万年不变学生表
有2张表,学生表(student)基本信息如下
科目和分数表(grade)
计算学生平均分数
1.计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩
select a.id, a.name, c.avg_score
from student a,
(select b.id, avg(b.score) as avg_score
from grade b
group by b.id
)c
where a.id = c.id
统计各科目成绩
2.计算每个人的成绩,总分数,平均分,要求显示:学号,姓名,语文,数学,英语,总分,平均分
使用case when 语法把科目字段分解成具体的科目:语文,数学, 英语
select a.id as 学号, a.name as 姓名,
(case when b.kemu='语文' then score else 0 end) as 语文,
(case when b.kemu='数学' then score else 0 end) as 数学,
(case when b.kemu='英语' then score else 0 end) as 英语
from student a, grade b
where a.id = b.id
SELECT a.id as 学号, a.name as 姓名,
sum(case when b.kemu='语文' then score else 0 end) as 语文,
sum(case when b.kemu='数学' then score else 0 end) as 数学,
sum(case when b.kemu='英语' then score else 0 end) as 英语,
sum(b.score) as 总分 ,
sum(b.score)/count(b.score) as 平均分
FROM student a, grade b
where a.id = b.id
GROUP BY b.id, b.id
每门课程平均成绩
3.列出各门课程的平均成绩,要求显示字段:课程,平均成绩
select b.kemu, avg(b.score)
from grade b
group by b.kemu
成绩排名
4.列出数学成绩的排名, 要求显示字段:学号,姓名,成绩,排名
在查询结果表里面添加一个变量@paiming,让它自动加1
SELECT
t.id, t.score as 数学分数, @paiming := @paiming+1 as 排名
FROM
(SELECT b.id, b.score
FROM grade b
WHERE b.kemu = '数学'
ORDER BY score
DESC) AS t,
(SELECT @paiming := 0) r
结合student表获取学生名称
SELECT
t.id, a.name,t.score as 数学分数, @paiming := @paiming+1 as 排名
FROM
(SELECT b.id, b.score
FROM grade b
WHERE b.kemu = '数学'
ORDER BY score
DESC) AS t,
(SELECT @paiming := 0) r,
student a
WHERE a.id = t.id
同结果名次相同
上图由于同一个分数的小伙伴,排名不一样,本着公平、公正、公开的原则,同一分数名次一样
SELECT
t.id, a.name,t.score as 数学分数,
(CASE
WHEN @temp = t.score THEN
@paiming
WHEN @temp := t.score THEN
@paiming :=@paiming + 1
WHEN @temp = 0 THEN
@paiming :=@paiming + 1
END) AS num
FROM
(SELECT b.id, b.score
FROM grade b
WHERE b.kemu = '数学'
ORDER BY score
DESC) AS t,
(SELECT @paiming := 0, @temp := 0) r,
student a
WHERE a.id = t.id
排名相同的占个名次
SELECT obj.id, obj.score as 数学,
@rownum := @rownum + 1 AS num_tmp,
@incrnum := (CASE
WHEN @rowtotal = obj.score THEN
@incrnum
WHEN @rowtotal := obj.score THEN
@rownum
END) AS 排名
FROM
(SELECT id, score
FROM grade
WHERE kemu = "数学"
ORDER BY
score DESC
) AS obj,
(SELECT @rownum := 0 ,@rowtotal := NULL ,@incrnum := 0) r
交流QQ群:779429633
关于面试总结2-SQL学生表的更多相关文章
- 关于面试总结-SQL学生表
前言 每次面试必考SQL,小编这几年一直吃SQ的亏,考题无非就是万年不变学生表,看起来虽然简单,真正写出来,还是有一定难度.于是决定重新整理下关于SQL的面试题,也可以帮助更多的人过SQL这一关. 作 ...
- 学生表sid,sname,结果表cid,cname,学生成绩表sid,cid,cscore,最高要求的分数输出候补课程专门命名
--1.建表SQL: --学生表: -- Createtable createtable STUDENT ( SID NUMBERnotnull, SNAME NVARCHAR2) ) table ...
- 关于面试总结1-SQL学生表
前言 每次面试必考SQL,小编这几年一直吃SQ的亏,考题无非就是万年不变学生表,看起来虽然简单,真正写出来,还是有一定难度.于是决定重新整理下关于SQL的面试题,也可以帮助更多的人过SQL这一关. 作 ...
- sql面试题(学生表_课程表_成绩表_教师表)
原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程 ...
- SQL Server 基础之《学生表-教师表-课程表-选课表》(二)
表结构 --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称CourseName. ...
- 学生表 课程表 成绩表 教师表 50个常用sql语句
原文:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/23/1572276.html Student(S#,Sname,Sage,Ssex) ...
- 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习
什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...
- 经典sql面试题(学生表_课程表_成绩表_教师表)
转载:https://www.cnblogs.com/qixuejia/p/3637735.html 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna ...
- sql server 很好的基础练习 <学生表-老师表-课程表-选课表>
表结构 --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称CourseName. ...
随机推荐
- dede列表页读取当前栏目名称
list或者arclist之内使用[field:typename/]之外使用{dede:field name='typename'/}
- aria2
在之前我们已经介绍了通过uGet使用aria2来进行下载,但是这样只是使用aria2最简单的功能,现在我们来介绍一下aria2的常用命令 简单篇: 一般使用使用 aria2 下载文件,只需在命令后附加 ...
- input标签的事件汇总
我在做一个注册时用到了,在网上查的,比较碎.就汇总了下, 1.onfocus 当input 获取到焦点时触发 2.onblur 当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点 ...
- python中使用pillow绘制汉字
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow from PIL import Image, ImageFont, I ...
- ExpressMapper- The New .NET Mapper!
推荐,据测试比手工映射的效率还高. https://www.codeproject.com/Tips/1009198/Expressmapper-The-New-NET-Mapper
- CentOS 7.x 安装 Docker
安装之前确保之前没有安装过docker为此首先删除存在的docker程序 sudo yum remove docker \ docker-common \ docker-selinux \ docke ...
- spring-cloud-sleuth+zipkin追踪服务实现(四)
1.前言 在上一篇spring-cloud-sleuth+zipkin追踪服务实现(三)的处理实现后,很多朋友告诉我,在zipkin server的管理页面无法看到项目依赖关系. 当时也没有多想,以为 ...
- zabbix 自动发现
转自:https://blog.csdn.net/yyy72999/article/details/76065374 zabbix自动发现/zabbix自动发现规则 置顶2017年07月25日 14: ...
- 使用matplotlib绘制散点图
在matplotlib中使用函数 matplotlib.pyplot.scatter 绘制散点图,matplotlib.pyplot.scatter的函数签名如下: matplotlib.pyplot ...
- javascript模拟flash头像裁切上传
是的,jq已经有类似的插件了,或者干脆用flash算了,为什么我还要自己写?因为造(wo)轮(bu)子(hui)也(flash)是一个学习的过程,轮子不会造,将来怎么造飞机?先来一张最终效果图: 一. ...