2017-11-14 16 views
1
| b_id | 
+------+ 
| 10 | 
| 10 | 
| 20 | 
| 30 | 
| 40 | 
| 40 | 
| 70 | 
| 40 | 
| 10 | 

非常に類似したmysql query for maximum duplicate value私はb_id(s)のエントリが最も多く必要です。それが唯一の時間の最大数を繰り返しb_idsの一つを示して最大重複値のMySQLクエリ

掲載ソリューション

select b_id, count(b_id) 
from books 
group by b_id 
order by count(b_id) desc 
limit 1; 

は、私のために動作しません。 ここに私の必要な結果は

| b_id | reps | 
+------+------+ 
| 10 | 3 | 
| 40 | 3 | 

答えて

2

はB_IDを得るためにあなたのメインクエリと内部クエリの同じクエリの試合数で、その後あなたの最大カウント値を与え、一部(複数の参加横断するクエリを移動し、ここに行くです)より良く理解するために上記書き換えるための別の方法と同じ最大数

select a.b_id,maxcountb 
from books a 
cross join (
    select count(b_id) maxcountb 
    from books 
    group by b_id 
    order by maxcountb desc 
    limit 1 
) b 
group by a.b_id 
having count(a.b_id) =maxcountb 

Demo

を持っている人

select a.b_id,count(a.b_id) maxcounta 
from books a 
group by a.b_id 
having maxcounta =(
    select count(b_id) maxcountb 
    from books 
    group by b_id 
    order by maxcountb desc 
    limit 1 
) 

Demo

+0

クロス結合はほとんど不要と思われます。 – Strawberry

+0

@Strawberryあなたはクロス・ジョインの代わりにある種のサブ・セレクトを意味しますか?私は通常、このタイプのクエリを好むかもしれませんあなたは私にそのようなサブ選択/十字結合のためのより良い選択肢を提案することができるかもしれません –

1

これを試してみてください。..

select b_id, count(b_id) 
    from books 
    group by b_id 
    having count(b_id) = (select count(b_id) as count_bid from books group by b_id order by count_bid desc limit 1) 
1
select b_id, count(b_id) 
    from books 
    group by b_id 
    having count(b_id) = (select max(count(b_id)) as count_bid from books); 
関連する問題