如何在PostgreSQL中选择最大计数
我在PostgreSQL中有一个具有以下模式的表:如何在PostgreSQL中选择最大计数,sql,postgresql,group-by,Sql,Postgresql,Group By,我在PostgreSQL中有一个具有以下模式的表: Category | Type ------------+--------- A | 0 C | 11 B | 5 D | 1 D | 0 F | 2 E | 11 E | 9 . | . .
Category | Type
------------+---------
A | 0
C | 11
B | 5
D | 1
D | 0
F | 2
E | 11
E | 9
. | .
. | .
如何选择类型的类别最大出现次数?以下是我的全部:
SELECT
category,
type,
COUNT(*)
FROM
table
GROUP BY
category,
type
ORDER BY
category,
count
DESC
我的预期结果如下:
类别|计数
----+----+---
A | 0 | 5
B | 5 | 30
C | 2 | 20
D | 3 | 10
这是每个类别中出现次数最多的类型,具有该类型的计数 选择类别,最大发生率 从中选择t.category作为类别,从表t中计算*作为发生
SELECT
category,
type,
COUNT(*)
FROM
table
GROUP BY
category,
type
HAVING
COUNT(*) = (SELECT MAX(C) FROM (SELECT COUNT(*) AS C FROM A GROUP BY A) AS Q)
编辑:
我向读者道歉
COUNT(*) = (SELECT MAX(COUNT(*)) FROM table GROUP BY category,type)
是ORACLE版本,postgresql版本是:
COUNT(*) = (SELECT MAX(C) FROM (SELECT COUNT(*) AS C FROM A GROUP BY A) AS Q)
如果我理解正确,您可以使用窗口功能:
SELECT category, type, cnt
FROM (SELECT category, type, COUNT(*) as cnt,
ROW_NUMBER() OVER (PARTITION BY type ORDER BY COUNT(*) DESC) as seqnum
FROM table
GROUP BY category, type
) ct
WHERE seqnum = 1;
您可以使用以下查询:
SELECT category, type, cnt
FROM (
SELECT category, type, cnt,
RANK() OVER (PARTITION BY category
ORDER BY cnt DESC) AS rn
FROM (
SELECT category, type, COUNT(type) AS cnt
FROM mytable
GROUP BY category, type ) t
) s
WHERE s.rn = 1
上面的查询使用OP中发布的您自己的查询,并对其应用RANK windowed函数。使用秩,我们可以指定来自初始查询的所有记录具有最大的COUNTtype值
注意:如果有多个类型具有特定类别的最大出现次数,则作为使用RANK的结果,上述查询将返回所有类型
将列名放在countcol\u name中您可以在您的问题中也包括预期的结果吗?这会导致聚合函数调用不能嵌套到MAXCOUNT中*
SELECT
category,
type,
COUNT(*) AS count
FROM
table
GROUP BY
category,
type
ORDER BY
category ASC