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。

预期输出:

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 ;

相关内容

最新更新