1

给定表menu,在他中是列 continent,例如在他中是这个数据

continent
----------
africa
africa
europe
europe
europe

我想获得大陆名称,在列中出现更多次,即结果必须是europe.

我写查询,但我认为我的查询很困难,对于这种情况必须存在更简单的解决方案。有一些想法吗?

这是我的查询

    SELECT continent FROM (
        SELECT continent, COUNT(continent) AS cnt FROM menu GROUP BY continent
    ) AS t
    WHERE cnt = (
        SELECT MAX(cnt) FROM ( 
            SELECT  COUNT(continent) AS cnt FROM menu GROUP BY continent
        ) AS t2
    )
4

1 回答 1

1

试试这个:

SELECT continent FROM (
    SELECT continent, COUNT(continent) AS cnt
    FROM menu
    GROUP BY continent
) AS t
ORDER BY cnt DESC
LIMIT 0, 1

我认为您也可以在单个查询中执行此操作:

SELECT continent, COUNT(continent) AS cnt
FROM menu
GROUP BY continent
ORDER BY cnt DESC
LIMIT 0, 1

问候


更新:

SELECT continent
FROM menu
GROUP BY continent
HAVING count(continent) = 
(
    SELECT COUNT(continent) AS cnt
    FROM menu
    GROUP BY continent
    ORDER BY cnt DESC
    LIMIT 0, 1
)

内部查询返回最多的重复项;然后在应用于 HAVING 运算符的外部查询中使用该值,以仅返回精确重复该次数的项目。这适用于 mysql,我不确定其他 SQL 方言。

于 2012-11-03T18:50:02.273 回答