我正在尝试为具有>的用户显示数据库的平均(百分位数)良好答案。给出了99个答案,而在“答案”栏中:1 =答案很好,-1 =答案不好......
使用SUM的问题是1 + -1 = 0从技术上讲,如果有人有5个好的答案和5个不好的答案,下面的查询给我0%,当我应该得到50%
SELECT
user_id,
CONCAT(ROUND( (SUM( `answer` ) / COUNT( `answer` ))*100 ,2 ),'%') AS totals
FROM myDB
WHERE answer <>0
GROUP BY user_id
HAVING COUNT( `answer` ) >99
ORDER BY totals DESC
我将如何使这项工作?
答案 0 :(得分:2)
试试这个,我现在无法测试。
SELECT
user_id,
CONCAT(
ROUND(
( SUM(
case when `answer`>0 then 1 else 0 end
) / COUNT( `answer` )
) * 100, 2
),'%'
) AS totals
FROM myDB
WHERE answer <>0
GROUP BY user_id
HAVING COUNT( `answer` ) >99
ORDER BY totals DESC
答案 1 :(得分:1)
如果你总是使用值1,-1作为答案,那么试试这个:
select user_id
, CONCAT(
ROUND(
count(case when answer > 0 then answer end) / count(answer) * 100, 2
), '%') totals
from your_table
group by user_id
having count(answer) > 99
答案 2 :(得分:0)
只需使用表达式将-1值替换为0.
如果“好”答案的值始终为1,则答案为非空。然后替换
SUM(answer)
用简单的东西:
SUM(answer=1)
如果为true,则MySQL中的布尔表达式返回1,如果为false则返回0,或返回NULL。我们可以使用更明确的表达式:
SUM(IF(answer=1,1,0))