我在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
请帮我解决这个问题。谢谢
demo:db<>小提琴
使用DISTINCT ON
:
SELECT DISTINCT ON (B)
A, B, C
FROM
my_table
ORDER BY B, C DESC, A
DISTINCT ON
正好为您提供了有序组的第一行。在这种情况下,CCD_ 3被分组。
在排序B
(这是必要的(之后:我们首先将最大的C
(带有DESC
(排序到每组的顶部。然后(如果有绑定的MAX(C)
值(,我们对A
进行排序,以使最小的A
到达顶部。
这似乎是一个最大的每组n个问题:
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
最小的行。
我觉得你需要max((
select A,B, max(c) from table_name
group by A,B
这将起作用:
select * from (SELECT t.*,
rank() OVER (PARTITION BY A,B order by C) rank
FROM tablename t)
where rank=1 ;