分組基操(二)
阿新 • • 發佈:2022-05-17
萬丈高樓平地起,不要小看了任意一根稻草!
資訊表user_profile,包括裝置,性別,年齡,學校,其中裝置id 是唯一鍵,做使用者唯一標識
還有一個使用者答題情況表question_practice_detail,包括裝置,題目,答題結果
現在需要統計每個學校的答題人的平均答題情況。
考慮到每個學校都有各自的使用者,這些使用者不一定都去答題。按照學校分組後,需要拿到該學校使用者的答題總量,以及答題使用者的數量,二者相除即可得到答題人的平均答題量。注意,是答題使用者,不是學校總使用者。
如果結果需要保留任一邊的完整資料,那就需要左右連線,如果都不需要,那就直接內連線SELECT
university, count(d.device_id) / count(DISTINCT d.device_id) avg_answer_cnt FROM user_profile p JOIN question_practice_detail d ON p.device_id = d.device_id GROUP BY p.university ORDER BY university
結果如下所示
其實,答題詳情表也算是需要完整保留的那一邊,所以可以這麼幹
SELECT university, count(1) / count(DISTINCT d.device_id) avg_answer_cnt FROM question_practice_detail d LEFT JOIN user_profile p ON p.device_id = d.device_id GROUP BY p.university ORDER BY university
之所以不用使用者表來進行左連線,無非就是想過濾那些沒有人答題的大學,當然,過濾也得在having 中
SELECT university, count(d.device_id) / count(DISTINCT d.device_id) avg_answer_cnt FROM user_profile p LEFT JOIN question_practice_detail d ON p.device_id = d.device_id GROUP BY p.university HAVING avg_answer_cnt > 0 ORDER BY university