2

このコードを使用して、データベースから数えて並べ替えています。

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

すべてのコンテンツが順番または人気順にリストされている限り、正しい結果が得られます。

私が望むのは、上位 5 つの結果を表示し、それぞれの数とすべての結果の合計数を表示することです。

例えば

上位の回答 (10)
2 番目の回答 (8)
3 番目の回答 (6)
など...

合計数 = 56

助けとアドバイスをいただければ幸いです。

ありがとう、

ジョン・C

4

2 に答える 2

3

を使用して全体を取得できますが、上位5つの結果のみを取得するためには、目的の結果でWITH ROLLUPはうまく機能しません。(編集:)コメントで説明されているように、順序付けでも機能しません。LIMIT 5

UNIONしたがって、上位5つだけでなく、すべての結果をフェッチしてアプリケーションで並べ替えるか、@RedFilterが提案する方法を使用してサーバー側でマージされた2つの異なるクエリを使用する必要があります。しかし、2つの別々のクエリを実行する場合、後で上位5つから合計を分割するのは手間がかかりすぎてほとんど利益がないため、私は個人的にクライアントアプリケーションとは別にそれぞれを発行したいと思います。

すべての結果を取得するには、次を使用します

select entertainer, count(*)
from final_results
group by entertainer with rollup

使用する2つの異なるフェッチを実行するには

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

select count(*)
from final_results

両方を1つのユニオンにしたい場合は、次のように実行できます。

(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
于 2012-07-18T20:31:27.553 に答える
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
于 2012-07-18T19:04:58.263 に答える