我希望修改一个我用于获取饼图数据的前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)。
答案 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 强>