SQL语句基础测试

&简单查询

&汇总分析

&复杂查询

&多表查询

&行列转换综合应用

一、语句

查询姓小的学生姓名

查询名字是红的学生姓名

查询名字有红的姓名

查询姓孟的老师姓名

查询0002课程的总成绩

查询选课同学人数

查询各科最高成绩,最低成绩

查询各科人数

统计男女人数

查询平均成绩大于60的学生和平均成绩

统计学生人数大于2人的学科

查询同名同姓的学生姓名

二、*行列转换

【面试题类型总结】这类题目属于行列如何互换,解题思路如下:

【解答】

1)第1步,使用常量列输出目标表的结构

可以看到查询结果已经和目标表非常接近了

select 学号,'课程号0001','课程号0002','课程号0003'

from score;

2)第2步,使用case表达式,替换常量列为对应的成绩

select 学号,

(case 课程号 when '0001' then 成绩 else 0 end) as '课程号0001',

(case 课程号 when '0002' then 成绩 else 0 end) as  '课程号0002',

(case 课程号 when '0003' then 成绩 else 0 end) as '课程号0003'

from score;

在这个查询结果中,每一行表示了某个学生某一门课程的成绩。比如第一行是'学号0001'选修'课程号00001'的成绩,而其他两列的'课程号0002'和'课程号0003'成绩为0。每个学生选修某门课程的成绩在下图的每个方块内。我们可以通过分组,取出每门课程的成绩。

3)第3步,分组

分组,并使用最大值函数max取出上图每个方块里的最大值

select 学号,

max(case 课程号 when '0001' then 成绩 else 0 end) as '课程号0001',

max(case 课程号 when '0002' then 成绩 else 0 end) as '课程号0002',

max(case 课程号 when '0003' then 成绩 else 0 end) as '课程号0003'

from score

group by 学号

结果:

你可能感兴趣的:(SQL语句基础测试)