我正在使用此代码对我的数据库进行计数和排序:
$qry = "select entertainer, count(*) from final_results group by entertainer order by count(*) desc";
我得到了正确的结果,因为它按顺序或受欢迎程度列出了所有内容。
我想要显示前 5 个结果,每个结果都有一个计数,然后是所有结果的总数。
例如
Top response (10)
Second response (8)
Third response (6)
etc...
Total count = 56
如果有任何帮助和建议,我将不胜感激。
谢谢
约翰·C
最佳答案
您可以使用 WITH ROLLUP
获取总计,但这不适用于 LIMIT 5
您想要只获取前五个结果。 (编辑:)它也不适用于排序,如评论中所述。
因此,您要么必须获取所有结果,而不仅仅是前 5 个结果,然后在应用程序中对它们进行排序,要么使用两个不同的查询,可能使用 UNION
在服务器端合并@RedFilter 建议。但是,如果您执行两个单独的查询,我个人宁愿从客户端应用程序中单独发出每个查询,因为稍后从前五个查询中分割总数会带来太多的工作而收效甚微。
要获取所有结果,您可以使用
select entertainer, count(*)
from final_results
group by entertainer with rollup
要执行两次不同的提取,您将使用
select entertainer, count(*)
from final_results
group by entertainer
order by count(*) desc
limit 5
和
select count(*)
from final_results
如果您希望两者都在一个联合中,您可以这样做
(select 1 as unionPart, entertainer, count(*) as count
from final_results
group by entertainer
order by count(*) desc
limit 5)
union all
(select 2 as unionPart, 'Total count', count(*) as count
from final_results)
order by unionPart asc, count desc
关于MySql 按 COUNT 排序并列出总计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11548479/