如何在SQL中选择具有更高值的行?

时间:2017-01-10 12:55:07

标签: sql postgresql greatest-n-per-group

假设我们有这张表:

----------
number |name| price
----------
1     |  a |  2
----------
1     |  b |  4
----------
2     |  c |  4
----------
3     |  d |  6
----------

我想选择数字及其最高价格。那么我怎样才能只选择数字1的行,它具有较高的价格而不显示另一行?我的问题是第二栏。

2 个答案:

答案 0 :(得分:1)

简单:GROUP BY

select number, max(price)
from your_table
group by number;

如果您有更多列,并且想要选择具有最高价格的行,请使用:

select *
from (select
    t.*,
    row_number() over (partition by number order by price desc) rn
from your_table t) t
where rn = 1;

答案 1 :(得分:1)

在Postgres中,为每个price获取最高number行的最有效方法是使用distinct on

select distinct on (number) t.*
from t
order by number, price desc;