【问题标题】:Getting an Average from counting Rows in MySQL从 MySQL 中计算行数获得平均值
【发布时间】:2014-09-08 16:12:04
【问题描述】:

我试图为给出> 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 

我将如何进行这项工作?

【问题讨论】:

    标签: mysql select count sum rounding


    【解决方案1】:

    试试这个,我现在无法测试。

    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 
    

    【讨论】:

      【解决方案2】:

      如果你总是使用值 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
      

      【讨论】:

        【解决方案3】:

        只需使用表达式将 -1 值替换为 0。

        如果“好”的答案总是值 1,并且答案是非空的。然后替换

        SUM(answer)
        

        用一些简单的东西:

        SUM(answer=1)
        

        MySQL 中的布尔表达式如果为真则返回 1,如果为假则返回 0,或 NULL。我们可以使用更明确的表达方式:

        SUM(IF(answer=1,1,0))
        

        【讨论】:

          猜你喜欢
          • 2021-09-25
          • 1970-01-01
          • 2010-11-25
          • 2012-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多