博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于面试总结2-SQL学生表
阅读量:4652 次
发布时间:2019-06-09

本文共 2399 字,大约阅读时间需要 7 分钟。

前言

接着上一篇,继续学生表SQL

  • 1.计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩
  • 2.计算每个人的成绩,总分数,平均分,要求显示:学号,姓名,语文,数学,英语,总分,平均分
  • 3.列出各门课程的平均成绩,要求显示字段:课程,平均成绩
  • 4.列出数学成绩的排名, 要求显示字段:学号,姓名,成绩,排名

万年不变学生表

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

1070438-20181204155909464-1704583458.png

科目和分数表(grade)

1070438-20181204160136256-480175290.png

计算学生平均分数

1.计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩

select  a.id, a.name, c.avg_score from student a,(select b.id, avg(b.score) as avg_score from grade  bgroup by b.id)cwhere a.id = c.id

1070438-20181205142055705-1725733781.png

统计各科目成绩

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 bwhere a.id = b.id

1070438-20181205150920930-1766640244.png

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 bwhere a.id = b.idGROUP BY b.id, b.id

1070438-20181205150314430-1659542417.png

每门课程平均成绩

3.列出各门课程的平均成绩,要求显示字段:课程,平均成绩

select b.kemu, avg(b.score)from grade bgroup by b.kemu

1070438-20181205152151034-1662619120.png

成绩排名

4.列出数学成绩的排名, 要求显示字段:学号,姓名,成绩,排名

在查询结果表里面添加一个变量@paiming,让它自动加1

SELECTt.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

1070438-20181205155302328-1864445101.png

结合student表获取学生名称

SELECTt.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 aWHERE a.id = t.id

1070438-20181205160434135-1710428849.png

同结果名次相同

上图由于同一个分数的小伙伴,排名不一样,本着公平、公正、公开的原则,同一分数名次一样

SELECTt.id, a.name,t.score as 数学分数, (CASEWHEN @temp = t.score THEN    @paimingWHEN @temp := t.score THEN    @paiming :=@paiming + 1WHEN @temp = 0 THEN    @paiming :=@paiming + 1END) AS numFROM    (SELECT b.id, b.score    FROM grade b  WHERE b.kemu = '数学'    ORDER BY score     DESC) AS t, (SELECT @paiming := 0, @temp := 0) r,  student aWHERE a.id = t.id

1070438-20181205165143776-621218764.png

排名相同的占个名次

SELECT  obj.id, obj.score as 数学,    @rownum := @rownum + 1 AS num_tmp,    @incrnum := (CASEWHEN @rowtotal = obj.score THEN   @incrnumWHEN @rowtotal := obj.score THEN   @rownumEND) AS 排名FROM(SELECT id, scoreFROM gradeWHERE kemu = "数学"ORDER BYscore DESC) AS obj,(SELECT @rownum := 0 ,@rowtotal := NULL ,@incrnum := 0) r

1070438-20181205173058902-626429086.png

交流QQ群:779429633

转载于:https://www.cnblogs.com/yoyoketang/p/10071410.html

你可能感兴趣的文章
SQLITE入门-逐步讲解SQLITE命令行(六)
查看>>
Combine String HDU - 5707 dp or 广搜
查看>>
VB6.0 API 累计
查看>>
第十周学习进度博客
查看>>
Ecshop 最小起订量如何设置
查看>>
不使用其他变量实现两变量互换
查看>>
bcp功能
查看>>
xcode项目打不开:incompatible project version问题
查看>>
学习网站
查看>>
C#4.0新特性dynamic\可选参数、命名参数
查看>>
使用免费SSL证书让网站支持HTTPS访问
查看>>
第5章 使用MUI与H5+构建移动端app
查看>>
poj 2528 Mayor's posters (线段树+染色)
查看>>
eclipse中跳转到其它函数方法后如何快速返回原处
查看>>
第三次作业
查看>>
javascript相关知识
查看>>
数组对象去重
查看>>
你未必知道的12个JavaScript技巧
查看>>
c#创建windows服务
查看>>
51Nod 1050 循环数组最大子段和 | DP
查看>>