从MySQL中计算行数获得平均值

时间:2014-09-08 16:12:04

标签: mysql select count sum rounding

我正在尝试为具有>的用户显示数据库的平均(百分位数)良好答案。给出了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 

我将如何使这项工作?

3 个答案:

答案 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))