MySQL 基本查询41--45
Bitgeek 2018-12-15 tag1
# 题目41:查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩—比较综合,多看!一个表自连
3个字段同时在一个表中,所以我们可以通过一个表Score的自连接来实现查出
select
a.s_id
,a.c_id
,a.s_score
from Score a
join Score b
on a.c_id != b.c_id
and a.s_score = b.s_score
and a.s_id != b.s_id
group by 1,2,3;
# 题目42:题目的要求就是找出每门课的前2名同学—多看,比较综合,解决前几名排序的问题
解决前几名排序的问题,特别好的方法!
SELECT
a.c_id,
a.s_id,
a.s_score
FROM
Score a
WHERE
( SELECT count( 1 ) -- count(1)类似count(*):统计表b中分数大的数量
FROM Score b WHERE b.c_id = a.c_id -- 课程相同
AND b.s_score >= a.s_score ) <= 2 -- 前2名
ORDER BY
a.c_id;
# 题目43:统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT
c_id,
COUNT( s_id ) num
FROM
score
GROUP BY
c_id
HAVING
COUNT( s_id ) > 5
ORDER BY
COUNT( s_id ) DESC, c_id;
# 题目44:检索至少选修两门课程的学生学号
SELECT
s_id,
count(*) num
FROM
Score
GROUP BY
s_id
HAVING
count(*) >= 2;
# 题目45:查询选修了全部课程的学生信息
select * -- 3、s_id对应的学生信息
from Student
where s_id in(select s_id -- 2、最大课程数对应的s_id
from Score
group by s_id
having count(*)=(select count(*) from Course) -- 1、全部课程数
)