sql练习题(4)

-- 25、查询各科成绩前三名的记录
-- mark 
-- 1.选出b表比a表成绩大的所有组
-- 2.选出比当前id成绩大的 小于三个的
SELECT a.s_id,a.c_id,a.s_score FROM score a 
LEFT JOIN score b ON a.c_id = b.c_id AND a.s_score < b.s_score
GROUP BY a.s_id,a.c_id,a.s_score 
HAVING COUNT(b.s_id)<3
ORDER BY a.c_id,a.s_score DESC

-- 26、查询每门课程被选修的学生数 

SELECT c_id 课程号, COUNT(s_id) 学生人数 FROM score 
GROUP BY c_id


-- 27、查询出只有两门课程的全部学生的学号和姓名 
-- 解法一:表连接
SELECT s.s_id, s.s_name FROM student s
LEFT JOIN score s1 ON s.s_id = s1.`s_id`
GROUP BY s1.`s_id`
HAVING COUNT(s1.`s_id`) = 2
-- 解法二:子查询
SELECT s_id,s_name FROM student WHERE s_id IN(
SELECT s_id FROM score GROUP BY s_id HAVING COUNT(c_id)=2);

-- 28、查询男生、女生人数 
-- mark
SELECT s_sex, COUNT(s_sex) AS 人数  FROM student GROUP BY s_sex


-- 29、查询名字中含有"风"字的学生信息

SELECT s.* FROM student s WHERE s.s_name LIKE "%%"

-- 30、查询同名同性学生名单,并统计同名人数 
-- mark 学号不同, 姓名、性别相同
SELECT a.s_name,a.s_sex,COUNT(*) FROM student a  
JOIN 
student b ON a.s_id != b.s_id AND a.s_name = b.s_name AND a.s_sex = b.s_sex
GROUP BY a.s_name,a.s_sex

猜你喜欢

转载自www.cnblogs.com/Aug-20/p/12052073.html