Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找mysql中最流行的_Mysql_Sql - Fatal编程技术网

查找mysql中最流行的

查找mysql中最流行的,mysql,sql,Mysql,Sql,我的桌子是空的 f1(drinker,shop) 表中列出了饮酒者和他们光顾的商店。我需要找到最受欢迎的商店。我知道我可以做一个简单的商店分组,按降序排序,并将结果限制为1,但我的疑问是,如果两个或两个以上的商店拥有相同数量的饮酒者,那么我的查询将失败。我不能使用限制2或3,因为我想这样做一个通用的工作查询,而不是一个特定于数据的查询。我已经没有想法了 注: 请不要这样表示: select shop from f1 group by shop order by count(*) desc li

我的桌子是空的

f1(drinker,shop)
表中列出了饮酒者和他们光顾的商店。我需要找到最受欢迎的商店。我知道我可以做一个简单的商店分组,按降序排序,并将结果限制为1,但我的疑问是,如果两个或两个以上的商店拥有相同数量的饮酒者,那么我的查询将失败。我不能使用限制2或3,因为我想这样做一个通用的工作查询,而不是一个特定于数据的查询。我已经没有想法了

注: 请不要这样表示:

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

在这种情况下,您必须比较计数。使用
分组方式查询时不太好看
查询:

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);