mysql leetcode 1280. 學生們參加各科測試的次數 解題思路 一步一步來
阿新 • • 發佈:2020-08-07
題目
解題思路
先看題目,再看結果
從結果可以看出
結果的前三列列為表students和subjects的交叉連線,也就是笛卡爾積
而最後一列為每個學生參加每個學科的測試次數,也就是分組統計
解題步驟
1.求笛卡爾積
select * from `Students` as s1 cross join `Subjects` as s2
2.分組統計
select student_id, subject_name, count(student_id) as attended_exams from `Examinations` group by student_id,subject_name
3.將兩部連線起來,以第一部分為準,也就是左連線
然後沒考試的,也就是測試次數為0,使用ifnull判斷設0
select ss.student_id as student_id, ss.student_name as student_name, ss.subject_name as subject_name, ifnull(e1.attended_exams, 0) as attended_exams from ( select * from `Students` as s1 cross join `Subjects` as s2 ) as ss left join( select student_id, subject_name, count(student_id) as attended_exams from `Examinations` group by student_id,subject_name ) as e1 on ss.student_id = e1.student_id and ss.subject_name = e1.subject_name order by ss.student_id, ss.subject_name