如何选择与 PostgreSQL 中另一列的最高值的唯一列值对对应的行?

Posted

技术标签:

【中文标题】如何选择与 PostgreSQL 中另一列的最高值的唯一列值对对应的行?【英文标题】:How can I select rows corresponding to the unique pair of column values with the highest value of another column in PostgreSQL? 【发布时间】:2021-04-11 03:22:16 【问题描述】:

我的桌子是这样的:

A B X
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
2 2 1
2 2 2
2 2 3

我需要为每个唯一的 A、B 对选择 X 列中值最高的行。

结果将是:

A B X
1 1 3
1 2 2
2 2 3

【问题讨论】:

【参考方案1】:

我会推荐distinct on

select distinct on (a, b) t.*
from t
order by a, b, x desc;

这允许您从行中选择除abx 之外的其他列。

使用(a, b, x desc) 上的索引,这通常是最快的解决方案。

【讨论】:

【参考方案2】:

您可以使用MAX聚合函数如下:

select A, B, MAX(X) AS X
  from YOUR_TABLE
group by A, B

【讨论】:

【参考方案3】:

这样会起作用:

select * from a where x = (select max(x) from a)

【讨论】:

以上是关于如何选择与 PostgreSQL 中另一列的最高值的唯一列值对对应的行?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据火花DataFrame中另一列的值更改列的值

基于sql中另一列的一列中的最大数据

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列

如何根据R中小标题中另一列指示的列的值添加列

如果同一行中另一列中的值匹配,如何比较列的两个值