mysql中巧用if函數,根據平均分生成排行榜

前言

最近項目中遇到一個需求,學生家長對某個老師做了問卷調查,然後後臺需要根據每個題目的分數,算出每個老師總分,以及多少個學生對老師進行了評分,進而算出平均分,以及百分率,最終確定排行榜。更多交流 join(“q_qun”,1071834648)

實現

需要用到的表如下
在這裏插入圖片描述
在這裏插入圖片描述
這裏的需求是指定了題目的id 纔會計算分數,計算分數爲10-item_id ,如果item_id爲0也就是第一個選項也就是10分,依次往後推。
這裏數據字典是用代碼生成的,下載可以到我上上傳的資源裏面去下載,也可以進入QQ羣獲取。
有人會說這有啥難度的,不就是sum求和嘛,有啥啊。剛開始我也這麼想的,問題就在於他不是直接求和是有條件的纔會相加,指定了某些題目纔會計算,這就用到了if。
先看sql

select teacher,total_socre,total_student,CONCAT(round((total_socre/(total_student*60)),2)*100,'%') as prencent from 
(
SELECT
	teacher,sum(if((question_id in (41,42,43,44,45,48)),10-item_id,0)) as total_socre,count(DISTINCT(a.phone)) as total_student
FROM
	rms_captcha a,
	rms_exam b
WHERE
	a.phone = b.tel
GROUP BY teacher
)t order by (total_socre/total_student) desc

首先我們來看這if,sum裏面的if的含義是,如果題目id在指定的需要計算分值的裏面,那就給分值,分值的規則也就是10-item_id,如果不在就給0,這樣子分數就統計出來了。因爲在目前exam表中,一個學生的一次答題會生成很多條記錄,統計學生人數就根據學生唯一標識手機號進行去重即可計算出學生的人數。因爲本次統計時基於老師爲維度統計的,因此還需要根據老師分組下。子查詢就這麼多。

外圍的查詢,就是對於子查詢的統計和排序,需要注意的就是對於百分比的計算,要多留意一點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章