SQL查询以查找与每种类型的最大计数对应的条目

SQL查询以查找与每种类型的最大计数对应的条目,sql,postgresql,Sql,Postgresql,我在Postgres中有一个表X,其中包含以下条目 A B C 2 3 1 3 3 1 0 4 1 1 4 1 2 4 1 3 4 1 0 5 1 1 5 1 2 5 1 3 5 1 0 2 2 1 2 3 我想找出每种A和B的最大C列的条目,即(按B分组),并尽可能使用最有效的查询,然后

我在Postgres中有一个表X,其中包含以下条目

A     B     C
2     3     1
3     3     1
0     4     1
1     4     1
2     4     1
3     4     1
0     5     1
1     5     1
2     5     1
3     5     1
0     2     2
1     2     3
我想找出每种A和B的最大C列的条目,即(按B分组),并尽可能使用最有效的查询,然后返回相应的A和B

预期产出:

A     B      C
1     2      3
2     3      1
0     4      1    
0     5      1 
请帮我解决这个问题。谢谢

在上使用不同的

SELECT DISTINCT ON (B)
    A, B, C
FROM
    my_table
ORDER BY B, C DESC, A 
DISTINCT ON
为有序组提供精确的第一行。在这种情况下,
B
被分组

订购
B
(这是必要的):我们首先订购每组顶部的最大
C
(带
DESC
)。然后(如果存在并列的
MAX(C)
值),我们对
A
进行排序,以使最小
A
位于顶部

这将起作用:

   select * from (SELECT t.*,
   rank() OVER (PARTITION BY A,B order by C) rank 
   FROM tablename t)
   where rank=1 ;
我觉得你需要max()


似乎这是一个最大的群体问题:

WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY B ORDER BY C DESC, A ASC) AS rnk
    FROM t
)
SELECT *
FROM cte
WHERE rnk = 1

您不清楚需要考虑哪个
A
,上面返回的是
A
最小的行

我需要A和B中的行对应B的最大值(C)分组。请您帮助我。感谢您的解决方案,我需要A列和B列对应B的最大值(C),B列按B列分组。如果您只想分组B,您希望A采用哪一个值?例如,对于组B=4,最大值(C)为1(因为所有值均为1),我应取哪一个A?如果计数相同,则可以考虑该计数的第一个条目,或者如果存在明显的最大值,则必须考虑相应的条目。谢谢你想要COUNT还是MAX?我需要MAX来解决这个问题。在你的例子中,你没有任何double(A,B)行。所以每一行都有它自己的最大值。你不能只按B分组,而让每一种A都有。为了更好的测试,我建议为C添加更多不同的值。因为1总是对你的用例没有意义为什么A=1对B=4。而不是0?是的,0也可以正常工作。我编辑过
WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY B ORDER BY C DESC, A ASC) AS rnk
    FROM t
)
SELECT *
FROM cte
WHERE rnk = 1