MySql按COUNT排序并列出总计数

时间:2012-07-18 19:01:32

标签: mysql

我正在使用此代码对我的数据库进行计数和排序:

$qry = "select entertainer, count(*) from final_results group by entertainer order by count(*) desc";

我得到了正确的结果,因为它按顺序或受欢迎程度列出了所有内容。

我想要的是要显示的前5个结果,每个结果的计数,然后是所有结果的总计数。

e.g。

  

热门回应(10)
  第二回应(8)
  第三回应(6)
  等... ...
  总人数= 56

我将不胜感激任何帮助和建议。

谢谢,

John C

2 个答案:

答案 0 :(得分:3)

您可以使用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

答案 1 :(得分:2)

select entertainer, count
from (
    (select entertainer, count(*) as count, 1 as sort
    from final_results 
    group by entertainer 
    order by count(*) desc
    limit 5)

    union all 

    (select 'Total count', (select count(*) from final_results), 2 as sort)
) a 
order by sort, count desc