DATABASE
test_score(ts)
id testid userid score
1 8 16 2.30
2 8 19 5.23
3 8 2 4.5
4 21 32 5.00
5 21 46 6.78
6 21 16 3.67
test_types(tn)
id test_name avg_points
8 Test1 10
21 Test3 10
37 Test8 10
我需要在百分比计算中得分,方法是在三个不同的列中显示结果并且用户得分得分
SELECT ts.testid, tt.test_name,
(SELECT count(ts.userid) FROM test_score ts JOIN test_types tn ON ts.testid = tn.id WHERE (ROUND(ts.score)/tn.avg_points * 100)<50) AS "condition1"
(SELECT count(ts.userid) FROM test_score ts JOIN test_types tn ON ts.testid = tn.id WHERE (ROUND(ts.score)/tn.avg_points * 100)BETWEEN 50 AND 70) AS "condition2"
(SELECT count(ts.userid) FROM test_score ts JOIN test_types tn ON ts.testid = tn.id WHERE (ROUND(ts.score)/tn.avg_points * 100)>70) AS "condition3"
FROM test_score ts JOIN test_types tn ON ts.testid = tn.id
答案 0 :(得分:2)
您可以使用条件聚合执行此操作:
SELECT ts.testid, tt.test_name,
SUM(CASE WHEN ROUND(ts.score)/tn.avg_points * 100)< 50 THEN 1 ELSE 0
END) as condition1,
SUM(CASE WHEN ROUND(ts.score)/tn.avg_points * 100) BETWEEN 50 AND 70 THEN 1 ELSE 0
END) as condition2,
SUM(CASE WHEN ROUND(ts.score)/tn.avg_points * 100) > 70 THEN 1 ELSE 0
END) as condition3
FROM test_score ts JOIN
test_types tn
ON ts.testid = tn.id
GROUP BY ts.testid, tt.test_name;