sql面试50题------(11-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

sql面试50题------(11-20)的更多相关文章
- SQL面试50题------(初始化工作、建立表格)
文章目录 1.建表 1.1 学生表和插入数据 1.2 教师表和数据 1.3 课程表和数据 1.4 成绩表和数据 2.数据库数据 2.1 学生表 2.2 教师表 2.3 课程表 2.4 得分表 1.建表 ...
- SQL面试50题
1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...
- sql面试50题------(21-30)
文章目录 21.查询不同老师所教不同课程平均分从高到低显示 23.使用分段[100,85),[85,70),[70,60),[<60] 来统计各科成绩,分别统计各分数段人数:课程ID和课程名称 ...
- sql面试50题------(1-10)
文章目录 1.查询课程编号'01'比课程编号'02'成绩高的所有学生学号 2.查询平均成绩大于60分得学生的学号和平均成绩 3.查询所有学生的学号,姓名,选课数,总成绩 4.查询姓"猴&qu ...
- 剑指offer 面试50题
面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置. 解题思路一:利用Python特 ...
- 转:sql 经典50题--可能是你见过的最全解析
题记:从知乎上看到的一篇文章,刚好最近工作中发现遇到的题目与这个几乎一样,可能就是从这里来的吧.^_^ 里面的答案没有细看,SQL求解重在思路,很多时候同一种结果可能有多种写法,比如题中的各科成绩取前 ...
- SQL语句50题
-- 一.创建教学系统的数据库,表,以及数据 --student(sno,sname,sage,ssex) 学生表--course(cno,cname,tno) 课程表--sc(sno,cno,sco ...
- sql查询50题
一个项目涉及到的50个Sql语句问题及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2 ...
- 程序员面试50题(1)—查找最小的k个元素[算法]
题目:输入n个整数,输出其中最小的k个.例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数 ...
随机推荐
- Kubernetes的整体架构
K8s将集群中的机器划分为一个主节点和一群工作节点,在主节点上运行着集群管理相关的一组进程kube-apiserver.kube-controller-manager 和 kube-scheduler ...
- 完整代码:安卓小软件“CSV联系人导入导出工具”
完整代码:安卓小软件"CSV联系人导入导出工具" 开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗 ...
- React重新渲染指南
前言 老早就想写一篇关于React渲染的文章,这两天看到一篇比较不错英文的文章,翻译一下(主要是谷歌翻译,手动狗头),文章底部会附上原文链接. 介绍 React 重新渲染的综合指南.该指南解释了什么是 ...
- 高效能团队的Java研发规范(进阶版)
目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性. 编程规约 1.基础 ...
- 【java】学习路径41-使用缓冲输入输出复制文件
结论:Buffered+数组 这种方式速度是最快的. public void testBufferedIO(String source,String target){ BufferedInputStr ...
- 全网最简单的大文件上传与下载代码实现(React+Go)
前言 前段时间我需要实现大文件上传的需求,在网上查找了很多资料,并且也发现已经有很多优秀的博客讲了大文件上传下载这个功能. 我的项目是个比较简单的项目,并没有采用特别复杂的实现方式,所以我这篇文章的目 ...
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...
- 后端程序员实现一个IP归属地的小程序
在日常开发中,后端主要提供数据以及处理业务逻辑,前端主要提供页面布局以及数据展示.后端程序员对于页面布局接触比较少,但是小程序有完善的文档说明.页面布局也相对简单,实现起来相对简单一些.而且小程序相对 ...
- selenium爬取图片
一.https/http开头的图片 1.我们以百度为例,下载百度图片到本地. 2.定位到该元素的img标签 from selenium import webdriver from selenium.w ...
- Promtail 配置文件说明
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492163&idx=1&sn=56b26aa387 ...