Auto commit

This commit is contained in:
smallkun 2025-02-27 11:50:52 +08:00
parent cbfc0a1669
commit a98fd5bb17

@ -495,25 +495,93 @@ LEFT JOIN courses c ON c.id = sc.course_id
WHERE sc.score > 80 AND c.id = '01';
#32.求每门课程的学生人数
SELECT c.`name`, COUNT(*)
FROM scores s, courses c
WHERE s.course_id = c.id
GROUP BY c.id;
#33.成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
SELECT st.`name`, sc.score
FROM students st, scores sc, courses c, teachers t
WHERE st.id = sc.student_id AND sc.course_id = c.id
AND c.teacher_id = t.id AND t.`name` = '张三'
ORDER BY sc.score DESC
LIMIT 1;
#34.成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
SELECT st.`name`, sc.score
FROM students st, scores sc
WHERE st.id = sc.student_id AND sc.score = (
SELECT MAX(score)
FROM scores, courses, teachers
WHERE scores.course_id = courses.id
AND courses.teacher_id = teachers.id AND teachers.`name` = '张三'
);
#35.查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
SELECT st.id, sc1.course_id, sc1.score
FROM students st, scores sc1
WHERE st.id = sc1.student_id AND sc1.score = ANY(
SELECT sc2.score
FROM scores sc2
WHERE sc2.student_id = st.id AND sc2.course_id != sc1.course_id
);
#36.查询每门课成绩最好的前两名
SELECT c1.`name`, c1.score
FROM (
SELECT c.`name`, sc.score
FROM scores sc, courses c
WHERE sc.course_id = c.id AND c.id = '01'
ORDER BY sc.score DESC
LIMIT 2
)c1
UNION ALL
SELECT c2.`name`, c2.score
FROM (
SELECT c.`name`, sc.score
FROM scores sc, courses c
WHERE sc.course_id = c.id AND c.id = '02'
ORDER BY sc.score DESC
LIMIT 2
)c2
UNION ALL
SELECT c3.`name`, c3.score
FROM (
SELECT c.`name`, sc.score
FROM scores sc, courses c
WHERE sc.course_id = c.id AND c.id = '03'
ORDER BY sc.score DESC
LIMIT 2
)c3;
#37.统计每门课程的学生选修人数(超过 5 人的课程才统计)
SELECT c.`name`, COUNT(*) c
FROM scores s, courses c
WHERE s.course_id = c.id
GROUP BY c.id
HAVING c>5;
#38.检索至少选修两门课程的学生学号
SELECT st.id, st.`name`
FROM students st
WHERE (
SELECT COUNT(*)
FROM scores sc
WHERE sc.student_id = st.id
)>=2;
#39.查询选修了全部课程的学生信息
SELECT st.*
FROM students st, scores sc
WHERE st.id = sc.student_id
GROUP BY st.id
HAVING COUNT(*) = 3;
#40.查询各学生的年龄,只按年份来算
SELECT s.`name`, TIMESTAMPDIFF(YEAR,s.birth,NOW())
FROM students s;
#41.查询各学生的年龄,按照出生日期来算,当前月日 < 出生年月的月日则年龄减一
SELECT s.`name`, IF(DATE_FORMAT(s.birth,'%m-%d') < DATE_FORMAT(NOW(),'%m-%d'),
TIMESTAMPDIFF(YEAR,s.birth,NOW())-1, TIMESTAMPDIFF(YEAR,s.birth,NOW()))
FROM students s;
#42.查询本周过生日的学生