sql面试50题------(11-20)

简介: 这篇文章提供了SQL面试中的50道题目,其中详细解释了11至20题,包括查询与学号为“01”的学生所学课程相同的学生信息、不及格课程的学生信息、各科成绩统计以及学生的总成绩排名等问题的SQL查询语句。

文章目录

  • 11、查询至少有一门课与学号为‘01’的学生所学课程相同的学生的学号和姓名
  • 12、查询和‘01’号同学所学课程完全相同的其他同学的学号
  • 13、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
  • 16、检索01课程分数小于60,按分数降序排列的学生信息
  • 17、按平均成绩从高到低显示所有同学的所有课程的成绩以及平均成绩
  • 18、查询各科成绩最高分,平均分,最低分,及格率,中等率,优良率,优秀率
  • 20、查询学生的总成绩并进行排名

11、查询至少有一门课与学号为‘01’的学生所学课程相同的学生的学号和姓名

select s_id,s_name
from student
where s_id in
(

select DISTINCT s_id 
from score
where c_id in(

select c_id from score where s_id='01'
) and s_id != '01'

)

在这里插入图片描述
扩展

select a.s_id,a.s_name
from student as a
inner join 
(

select DISTINCT s_id 
from score
where c_id in(

select c_id from score where s_id='01'
) and s_id != '01'

) as b on a.s_id = b.s_id

在这里插入图片描述

12、查询和‘01’号同学所学课程完全相同的其他同学的学号

select  s_id from score where s_id in(

select  s_id from score where c_id in(

select c_id from score where s_id ='01'
) and s_id != '01' 

GROUP BY s_id having count(DISTINCT c_id) = (select count(DISTINCT c_id) from score where s_id='01')

)

GROUP BY s_id having count(DISTINCT c_id) = (select count(DISTINCT c_id) from score where s_id='01')

在这里插入图片描述
假如一号选了英语和数学两门课,二号选了英语、数学和语文三门课。
还有一种情况、三号选了 英语和物理。

纠正sql语句

  • 1、先查询出课程号不一样的学生
  • 2、然后再剩下的学号中选择课程数目相同的学生
select s_id,s_name from student where s_id in
(
select s_id from score 
where s_id != '01'
GROUP BY s_id 
HAVING count(DISTINCT c_id) = (SELECT count(DISTINCT c_id) from score where s_id ='01')
) and s_id not in(

select s_id from score where c_id not in 
(
select c_id from score where s_id = '01'
)

)

在这里插入图片描述

13、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

select a.s_id,a.s_name,avg(s_score) from student as a
INNER JOIN score as b
on a.s_id = b.s_id

where a.s_id in(

select s_id from score
where s_score < 60
group by s_id 
having count(DISTINCT c_id) >= 2

)
group by s_id,s_name

在这里插入图片描述

16、检索01课程分数小于60,按分数降序排列的学生信息

  • DESC 降序
  • ASC 升序
select a.*,b.s_score
from student as a
INNER JOIN score as b
on a.s_id = b.s_id
where b.c_id = '01' and b.s_score < 60 
order by b.s_score DESC

在这里插入图片描述

17、按平均成绩从高到低显示所有同学的所有课程的成绩以及平均成绩

select a.s_id,a.c_id,a.s_score,b.avg_s_score
from score as a
INNER JOIN
(
select s_id,avg(s_score) as avg_s_score from score
GROUP BY s_id
) as b
on a.s_id = b.s_id

order by b.avg_s_score desc

在这里插入图片描述

改进

select 
s_id '学号',
MAX(case when c_id = '01' THEN s_score ELSE NULL END) '语文',
MAX(case when c_id = '02' THEN s_score ELSE NULL END) '数学',
MAX(case when c_id = '03' THEN s_score ELSE NULL END) '英文',
avg(s_score) '平均成绩'
from score
group by s_id
ORDER BY avg(s_score) desc

在这里插入图片描述

18、查询各科成绩最高分,平均分,最低分,及格率,中等率,优良率,优秀率

select  c.c_id ,c.c_name,
max(s.s_score) '最高分',
min(s.s_score) '最低分',
avg(s.s_score) '平均分',
sum(case when s.s_score >= 60 then 1 else 0 END)/count(s_id) '及格率',
sum(case when s.s_score >= 70 and s.s_score < 80 then 1 else 0 END)/count(s_id) '中等率',
sum(case when s.s_score >= 80 and s.s_score <90 then 1 else 0 END)/count(s_id) '优良率',
sum(case when s.s_score >= 90 then 1 else 0 END)/count(s_id) '优秀率'

from score as s
INNER JOIN course as c
on s.c_id = c.c_id
group by c_id

在这里插入图片描述

20、查询学生的总成绩并进行排名

select s_id,sum(s_score) 
from score 
group by s_id
order by sum(s_score) desc

在这里插入图片描述


select a.s_id,b.s_name,sum(s_score) '总分'
from score as a
inner JOIN student as b
on a.s_id = b.s_id

group by a.s_id
order by sum(s_score) desc

在这里插入图片描述

相关文章
|
2月前
|
SQL 数据库
SQL面试50题------(初始化工作、建立表格)
这篇文章提供了SQL面试中可能会遇到的50道题目的建表和初始化数据的SQL脚本,包括学生、教师、课程和成绩表的创建及数据插入示例。
SQL面试50题------(初始化工作、建立表格)
|
5月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
151 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
5月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
957 0
|
5月前
|
SQL 关系型数据库 MySQL
MYSQL-SQL语句性能优化策略以及面试题
MYSQL-SQL语句性能优化策略以及面试题
120 1
|
2月前
|
SQL
sql面试50题------(1-10)
这篇文章提供了SQL面试中的前10个问题及其解决方案,包括查询特定条件下的学生信息、教师信息和课程成绩等。
sql面试50题------(1-10)
|
2月前
|
SQL
sql面试50题------(21-30)
这篇文章是SQL面试题的21至30题,涵盖了查询不同老师所教课程的平均分、按分数段统计各科成绩人数、查询学生平均成绩及其名次等问题的SQL查询语句。
sql面试50题------(21-30)
|
4月前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
4月前
|
SQL 关系型数据库 MySQL
sql面试题库
sql面试题库
|
4月前
|
SQL Oracle 关系型数据库
SQL 面试系列(一)【留存率问题】
SQL 面试系列(一)【留存率问题】
|
4月前
|
SQL 算法 大数据
深入解析力扣177题:第N高的薪水(SQL子查询与LIMIT详解及模拟面试问答)
深入解析力扣177题:第N高的薪水(SQL子查询与LIMIT详解及模拟面试问答)