2014-03-25 36 views
-1

我的表是找到最流行的在MySQL

f1(drinker,shop) 

表有飲酒者的名單以及他們visit.I需要找到最流行的shop.I知道我可以做一個簡單的組商店由商店和秩序降低的方式,並將結果限制爲1,但我的疑問是如果兩個或更多的商店有相同數量的飲酒者在這種情況下我的查詢失敗。我不能使用限制2或3,因爲我想要一個普通的工作查詢,而不是一個特定的數據。我正在用盡想法。

注: 請不要顯示此方式:

select shop from f1 group by shop order by count(*) desc limit 1 

回答

4

在這種情況下,你要比較的計數。不那麼漂亮了group by查詢:

select shop 
from f1 
group by shop 
having count(*) = (select max(cnt) 
        from (select count(*) as cnt 
         from f1 
         group by shop 
         ) s 
        ); 

你也可以做到這一點作爲一個子查詢:

select shop 
from f1 join 
    (select count(*) as cnt 
     from f1 
     group by shop 
     order by count(*) desc 
     limit 1 
    ) f1max 
group by shop 
having count(*) = max(f1max.cnt);