「SQL面试题库」 No_87 学生们参加各科测试的次数

2023-10-16 10:39:24 浏览数 (2)

今日真题

题目介绍: 学生们参加各科测试的次数 students-and-examinations

难度简单

SQL架构

学生表:

代码语言:javascript复制
Students
代码语言:javascript复制
 --------------- --------- 
| Column Name   | Type    |
 --------------- --------- 
| student_id    | int     |
| student_name  | varchar |
 --------------- --------- 
主键为 student_id(学生ID),该表内的每一行都记录有学校一名学生的信息。

科目表:

代码语言:javascript复制
Subjects
代码语言:javascript复制
 -------------- --------- 
| Column Name  | Type    |
 -------------- --------- 
| subject_name | varchar |
 -------------- --------- 
主键为 subject_name(科目名称),每一行记录学校的一门科目名称。

考试表:

代码语言:javascript复制
Examinations
代码语言:javascript复制
 -------------- --------- 
| Column Name  | Type    |
 -------------- --------- 
| student_id   | int     |
| subject_name | varchar |
 -------------- --------- 
这张表压根没有主键,可能会有重复行。
学生表里的一个学生修读科目表里的每一门科目,而这张考试表的每一行记录就表示学生表里的某个学生参加了一次科目表里某门科目的测试。
代码语言:javascript复制
sql
SELECT a.student_id, a.student_name, b.subject_name, COUNT(e.subject_name) AS attended_exams
FROM Students a CROSS JOIN Subjects b
LEFT JOIN Examinations e ON a.student_id = e.student_id AND b.subject_name = e.subject_name
GROUP BY a.student_id, b.subject_name
ORDER BY a.student_id, b.subject_name

CROSS JOIN Mysql中没有full outer join hive中可以用

  • 已经有灵感了?在评论区写下你的思路吧!

0 人点赞