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

sql面试50题------(11-20)的更多相关文章

  1. SQL面试50题------(初始化工作、建立表格)

    文章目录 1.建表 1.1 学生表和插入数据 1.2 教师表和数据 1.3 课程表和数据 1.4 成绩表和数据 2.数据库数据 2.1 学生表 2.2 教师表 2.3 课程表 2.4 得分表 1.建表 ...

  2. SQL面试50题

    1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...

  3. sql面试50题------(21-30)

    文章目录 21.查询不同老师所教不同课程平均分从高到低显示 23.使用分段[100,85),[85,70),[70,60),[<60] 来统计各科成绩,分别统计各分数段人数:课程ID和课程名称 ...

  4. sql面试50题------(1-10)

    文章目录 1.查询课程编号'01'比课程编号'02'成绩高的所有学生学号 2.查询平均成绩大于60分得学生的学号和平均成绩 3.查询所有学生的学号,姓名,选课数,总成绩 4.查询姓"猴&qu ...

  5. 剑指offer 面试50题

    面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置. 解题思路一:利用Python特 ...

  6. 转:sql 经典50题--可能是你见过的最全解析

    题记:从知乎上看到的一篇文章,刚好最近工作中发现遇到的题目与这个几乎一样,可能就是从这里来的吧.^_^ 里面的答案没有细看,SQL求解重在思路,很多时候同一种结果可能有多种写法,比如题中的各科成绩取前 ...

  7. SQL语句50题

    -- 一.创建教学系统的数据库,表,以及数据 --student(sno,sname,sage,ssex) 学生表--course(cno,cname,tno) 课程表--sc(sno,cno,sco ...

  8. sql查询50题

    一个项目涉及到的50个Sql语句问题及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2 ...

  9. 程序员面试50题(1)—查找最小的k个元素[算法]

    题目:输入n个整数,输出其中最小的k个.例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数 ...

随机推荐

  1. 最新MongoDB安装,学习笔记

    MongoDB 导读 作者还在陆续更新中,如果喜欢作者的笔记,觉得可以学习到有帮助,后面会不断学习新内容,就点个关注吧,如果觉得文章有关注可以点个赞,谢谢: 官网:https://www.mongod ...

  2. 针对单个球体的World类

    好了,终于到了可以看到图片的环节了.之前的类,你一定要实现好了.所有关于World类的报错,现在我们一个一个解决来了. 先看看World类的声明: #pragma once #ifndef __WOR ...

  3. 【达人专栏】还不会用Apache Dolphinscheduler吗,大佬用时一个月写出的最全入门教学【二】

    02 Master启动流程 2.1 MasterServer的启动 在正式开始前,笔者想先鼓励一下大家.我们知道启动Master其实就是启动MasterServer,本质上与其他SpringBoot项 ...

  4. Linux操作系统学习(运维必会)

    Linux一切皆文件,最高权限的账户root. 1.开机登录 开机会启动很多进程,在Windows上叫"服务"(service),在Linux上叫做"守护进程" ...

  5. 我开源了一个Go学习仓库|笔记预览

    前言 大半个月前我参与了字节后端面试,未通过第四面,面试总结写在了这篇文章: https://juejin.cn/post/7132712873351970823 在此文的末尾,我写到为了全面回顾Go ...

  6. 细数实现全景图VR的几种方式(panorama/cubemap/eac)

    Three.js系列: 在元宇宙看电影,享受 VR 视觉盛宴 Three.js系列: 造个海洋球池来学习物理引擎 Three.js系列: 游戏中的第一.三人称视角 Three.js系列: 数实现全景图 ...

  7. git reset总结

    git reset git 的重置操作 有三种模式:hard.mixed(默认).soft 1. hard 用法 hard会重置stage区和工作区,和移动代码库上HEAD 和branch的指针所指向 ...

  8. ELK接收paloalto防火墙威胁日志并定位城市展示

    ELK接收paloalto防火墙威胁日志并定位城市展示 一.准备环境: 搭建好的ELK环境 palo alto防火墙(企业用的) 二.安装logstash并做好过滤 将palo alto日志打到一台c ...

  9. 第一篇博客:HTML:background的使用

    开篇 我是一名程序员小白,这是我写的第一篇博客,在学习的路上难免会遇到难以解决的问题,我将会在这里写下我遇到的问题并附上解决方法 希望可以对各位有所帮助!! 我们在html中经常会遇到这样的问题 例如 ...

  10. 对于Java中权限修饰符的理解

    老是把Java中权限修饰符给忘记,写一个博客加深印象吧 权限分为四个作用域:当前类,同一个包,其他包的子类,其他包的类. 首先要知道包的概念,Java中一个包是指一个package下的所有文件. pr ...