代码之家  ›  专栏  ›  技术社区  ›  prof chaos

使用max查找最常见的column_name

  •  0
  • prof chaos  · 技术社区  · 9 年前

    我有一张名为 food :

    CREATE TABLE food
    (
        name varchar(30) primary key,
        type varchar(30)
    );
    

    我想找到 type 这张表中出现的次数最多。

    我可以使用

    SELECT type
    FROM food
    GROUP BY type
    ORDER BY count(type) DESC
    LIMIT 1
    

    但是 limit 1 未包含在标准中。如何使用找到相同的结果 MAX ? 例如,我想要这样的东西

    SELECT type
    FROM food
    GROUP BY type
    HAVING count(type) = MAX(count(type));
    

    HAVING count(type) = MAX(count(type)); 不允许。

    2 回复  |  直到 5 年前
        1
  •  2
  •   Tim Biegeleisen    9 年前

    可能效率不高

    SELECT type
    FROM food
    GROUP BY type
    HAVING COUNT(type) =
    (
        SELECT MAX(counting) FROM
        (
            SELECT COUNT(type) AS counting
            FROM food
            GROUP BY type
        ) t
    )
    
        2
  •  1
  •   jarlh    9 年前

    在执行 GROUP BY 具有 COUNT :

    with cte as
    (
        SELECT type, count(*) as cnt
        FROM food
        GROUP BY type
    )
    select type from cte
    where cnt = (select max(cnt) from cte)
    

    如果平局,将返回两行。

    (我不知道与马迪瓦南的答案相比,这是否会有相同或更好的性能。无论如何,打字要少一些。)