我的桌子是
f1(drinker,shop)
该表有一个饮用者和他们访问的商店列表。我需要找到最受欢迎的商店。我知道我可以通过商店做一个简单的小组并以降序排序并将结果限制为1但我怀疑的是,如果两个或更多商店有相同数量的饮酒者,那么我的查询就会失败。我不能使用限制2或3,因为我想要一般的工作查询而不是特定的数据。我的想法已经不多了。
注意: 请不要这样表达:
select shop from f1 group by shop order by count(*) desc limit 1
答案 0 :(得分: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);