用于饼图的前X个用户,在X分组到其他之后剩余

时间:2015-01-27 08:56:11

标签: mysql group-by

我希望修改一个我用于获取饼图数据的前5位用户的查询,方法是添加另一个名为“other”的部分,剩下的用户将被分组。

例如,我有10个用户,我想要获得前5个评论员,剩下的5个是在一个名为“其他”或类似内容的总计结果下。

示例代码:

SELECT user_id, count(user_id) as cnt
from users
GROUP BY user_id
ORDER BY cnt desc 
LIMIT 5

会抢到前5名,我不知道将剩余用户的总数添加到第6个结果中,这是他们所有帖子的总和。 (即如果最后5位用户发布了15篇文章,那么第6行的cnt将为15)。

2 个答案:

答案 0 :(得分:1)

你必须像先前所做的那样进行分组,然后在外部查询中添加行计数器,但是当rowcounter超过某个级别时(在你的情况下为5),它们总是具有相同的值。然后在最外面的查询中,您按此行计数器进行分组。

SELECT user_id, SUM(cnt) AS cnt FROM (
    SELECT cnt, @rowcnt := @rowcnt + 1,
    IF(@rowcnt <= 5, user_id, 'other') AS user_id
    FROM (
        SELECT user_id, count(user_id) as cnt
        from users
        GROUP BY user_id
    ) sq
    , (SELECT @rowcnt := 0) var_init_subquery_alias
    ORDER BY cnt DESC
) ssq
LEFT JOIN comments c ON ssq.user_id = c.user_id
GROUP BY user_id

使用LEFT JOIN,因为不会对user_id“other”发表评论。

答案 1 :(得分:0)

SELECT user_id, SUM(counter) FROM 
(SELECT @rownum := @rownum + 1 AS rank, 
CASE WHEN @rownum <= 5 THEN user_id ELSE 'Other' END AS user_id,
count(user_id) as counter
FROM users, (SELECT @rownum := 0) r GROUP BY user_id) hellTemp
GROUP BY user_id

<强> SAMPLE FIDDLE

相关问题