1. 程式人生 > 其它 >分組基操(二)

分組基操(二)

  萬丈高樓平地起,不要小看了任意一根稻草!

  資訊表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