我有一个像这个图像的数据库,
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
我怎么能得到它?有人可以帮帮我吗?
答案 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,你应该为该部门添加一个安全措施(如果那么可能?)。