使用max查找最常见的collumn_name

时间:2016-01-20 08:13:30

标签: sql postgresql count max having

我有一个名为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 个答案:

答案 0 :(得分:2)

可能效率不高

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
)

答案 1 :(得分:1)

使用cte(公用表格表达式),GROUP BYCOUNT一起使用:

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

如果有平局,将返回两行。

(我不知道与Madhivanan的回答相比,这是否会有相同或更好的表现。无论如何都要少打字。)