使用GROUP BY限制计数

use*_*479 2 mysql sql

我想使用COUNT(*)和将计数限制为5 ,group by但它返回所有行.考虑我有一个表名tbhits

         tbhits

     id    |     uname
 ------------------------
    101    |      john
    101    |      james
    101    |      henry
    101    |      paul
    101    |      jacob
    101    |      jaden
    101    |      steve
    101    |      lucas
    102    |      marie
Run Code Online (Sandbox Code Playgroud)

SELECT id,COUNT(*)as'hits'FROM tbhits GROUP BY id

回报

     id    |   hits
 --------------------
     101   |    8
     102   |    1
Run Code Online (Sandbox Code Playgroud)

但我希望小组将最大数量限制为5.

假设我有1000行我不想全部计算,如果行只是大于5然后只显示 5+

我尝试使用LIMIT 5,但它似乎不起作用

SELECT id,COUNT(*) as 'hits' FROM tbhits GROUP BY id LIMIT 5 不起作用.

我也用过 WHERE Clause

SELECT id,COUNT(*)as'hits'FROM tbhits WHERE id = 101 GROUP BY id LIMIT 5

但它仍然将命中率恢复为8.

          id    |   hits
        --------------------
          101   |    8
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

P. *_*eri 5

LIMIT旨在限制您从查询中获得的行数.我建议你使用COUNT如下功能:

SELECT id, CASE WHEN COUNT(*) < 6 then COUNT(*) ELSE '5+' END as 'hits' 
FROM tbhits 
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

关于在这里选择最少两个数字的更多细节,这里是sqlfiddle(考虑下次自己提供).

请注意,在我的第一个建议中,我选择了6而不是'5+',因为在我看来,你不应该混合使用数据类型.但是输入6也不是一个好的解决方案,因为不知道这个技巧的人不会注意到它('5+',至少是明确的)

就性能而言,AFAIK你不应该指望MySQL自己进行优化.