我想使用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)
任何帮助是极大的赞赏.
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自己进行优化.