如何计算MySQL中的百分比

时间:2017-12-14 17:00:59

标签: mysql

我有一个像这个图像的数据库,

id      q_id     body    user_id  thread
338222  433798  Testing    7178     1
338223  433798  Testing    5571     1
338224  433798  Testing    5571     1

我的查询看起来像这样,

SELECT 
thread, 
user_id, 
COUNT(*) AS contribution FROM answers GROUP BY user_id, thread ORDER BY thread

将返回thread,user_id和贡献。但我想得到贡献的百分比。让我们说user_id 7178对线程1贡献1次,线程1有3行,所以百分比为33.33%

thread  user_id contribution percentage
1       7178         1         33.33
1       5571         2         67.67 

我怎么能得到它?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

我认为这就是诀窍:

SELECT
  answers.thread,
  answers.user_id,
  COUNT(*) AS contribution,
  COUNT(*) / tmp.TOTAL * 100 AS percentage
FROM answers
  INNER JOIN (
    SELECT
      COUNT(*) AS TOTAL,
      thread
    FROM answers GROUP BY thread
  ) AS tmp ON tmp.thread = answers.thread
GROUP BY user_id, answers.thread;

由于您需要两个不同的聚合(一个用于总贡献量,一个用于每个用户的贡献量),因此您需要一个子查询。

请注意,您需要确保表格中没有0值。如果有一些0,你应该为该部门添加一个安全措施(如果那么可能?)。