LeetCode MySQL 1280. 学生们参加各科测试的次数
生活随笔
收集整理的這篇文章主要介紹了
LeetCode MySQL 1280. 学生们参加各科测试的次数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
學生表: Students
+---------------+---------+ | Column Name | Type | +---------------+---------+ | student_id | int | | student_name | varchar | +---------------+---------+主鍵為 student_id(學生ID),該表內的每一行都記錄有學校一名學生的信息。
科目表: Subjects
+--------------+---------+ | Column Name | Type | +--------------+---------+ | subject_name | varchar | +--------------+---------+主鍵為 subject_name(科目名稱),每一行記錄學校的一門科目名稱。
考試表: Examinations
+--------------+---------+ | Column Name | Type | +--------------+---------+ | student_id | int | | subject_name | varchar | +--------------+---------+這張表壓根沒有主鍵,可能會有重復行。
學生表里的一個學生修讀科目表里的每一門科目,
而這張考試表的每一行記錄就表示學生表里的某個學生參加了一次科目表里某門科目的測試。
要求寫一段 SQL 語句,查詢出每個學生參加每一門科目測試的次數,結果按 student_id 和 subject_name 排序。
查詢結構格式如下所示:
Students table: +------------+--------------+ | student_id | student_name | +------------+--------------+ | 1 | Alice | | 2 | Bob | | 13 | John | | 6 | Alex | +------------+--------------+ Subjects table: +--------------+ | subject_name | +--------------+ | Math | | Physics | | Programming | +--------------+ Examinations table: +------------+--------------+ | student_id | subject_name | +------------+--------------+ | 1 | Math | | 1 | Physics | | 1 | Programming | | 2 | Programming | | 1 | Physics | | 1 | Math | | 13 | Math | | 13 | Programming | | 13 | Physics | | 2 | Math | | 1 | Math | +------------+--------------+ Result table: +------------+--------------+--------------+----------------+ | student_id | student_name | subject_name | attended_exams | +------------+--------------+--------------+----------------+ | 1 | Alice | Math | 3 | | 1 | Alice | Physics | 2 | | 1 | Alice | Programming | 1 | | 2 | Bob | Math | 1 | | 2 | Bob | Physics | 0 | | 2 | Bob | Programming | 1 | | 6 | Alex | Math | 0 | | 6 | Alex | Physics | 0 | | 6 | Alex | Programming | 0 | | 13 | John | Math | 1 | | 13 | John | Physics | 1 | | 13 | John | Programming | 1 | +------------+--------------+--------------+----------------+ 結果表需包含所有學生和所有科目(即便測試次數為0): Alice 參加了 3 次數學測試, 2 次物理測試,以及 1 次編程測試; Bob 參加了 1 次數學測試, 1 次編程測試,沒有參加物理測試; Alex 啥測試都沒參加; John 參加了數學、物理、編程測試各 1 次。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/students-and-examinations
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 先進行內連接產生所有的組合
- 再把考試表左連接于上表
- 再分組
720 ms
或者用 count(e.subject_name) attended_exams,null 項不會被計算,返回不為null
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode MySQL 1280. 学生们参加各科测试的次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 828. 统计子串中的
- 下一篇: LeetCode LCP 11. 期望个