SQL查询以查找与每种类型的最大计数对应的条目
我在Postgres中有一个表X,其中包含以下条目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分组),并尽可能使用最有效的查询,然后
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