如下表所示,假设该表表名为 t
如果要计算不同难度下答题的准确率,可以按difficult_level
分组后求result = "right"
的条数除以总条数COUNT(*)
即可。
计算result = "right"
的条数时可以使用COUNT(IF(条件,TRUE,NULL))
语句
解释:
第一个参数是筛选条件,
第二个参数是为TRUE
条件,可以是表达式,数字等,
第三个参数一定要为NULL
(不计数),
如果符合条件,则为TRUE
,计数;如果不符合则为NULL
,不计数。
代码如下:
SELECT t.difficult_level,
COUNT(IF(t.result='right',TRUE,NULL)),COUNT(*),
COUNT(IF(t.result='right',TRUE,NULL))/COUNT(*) AS correct_rate
FROM t
GROUP BY t.difficult_level
结果如下:
参考原表,结果是正确的。
注意:
如果使用
COUNT(IF(条件,1,0))
语句
解释:这个语法的筛选条件是没有作用的,不论是否符合结果,都会进行计数,第三个参数必须为NULL
才行(不计数)
SELECT t.difficult_level,
COUNT(IF(t.result='right',1,0)),COUNT(*),
COUNT(IF(t.result='right',1,0))/COUNT(*) AS correct_rate
FROM t
GROUP BY t.difficult_level
结果如下(错误)
另外,还可以使用SUM(IF(条件,1,0))
进行累加计数
解释:如果满足条件,则结果累加1,否则结果累加0
代码
SELECT t.difficult_level,SUM(IF(t.result='right',1,0)),COUNT(*),
SUM(IF(t.result='right',1,0))/COUNT(*) AS correct_rate
FROM t
GROUP BY t.difficult_level
结果如下:
结果和使用 COUNT(IF(条件,TRUE,NULL))
语句的一样。