PostgreSQL在一定条件下获得最高价值

时间:2019-01-29 04:52:51

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

示例数据库表称为测试

enter image description here

我正在尝试在“最后一个高度相同”内获得“最高优先级”的行

这是我到目前为止尝试过的

我首先尝试获取“表中的最高优先级”,然后通过使用以下查询成功获得了结果

SELECT * FROM test WHERE priority = (SELECT MAX(priority) FROM test)

现在,我认为此查询可以工作,但是会引发错误消息。

SELECT * 
FROM test 
WHERE priority = (SELECT MAX(priority) FROM test ORDER BY height DESC) 
  

错误:列“ t2.height”必须出现在GROUP BY子句中或在聚合函数中使用

有人可以指导我如何解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

您可以在下面尝试-使用相关子查询

select * from test a where exists 
 (select 1 from test b  
   where a.height=b.height group by b.height having max(b.priority)=a.priority)
order by height desc

答案 1 :(得分:0)

如果我的理解正确,您将在Postgres中使用distinct on

select distinct on (height) t.*
from t
order by height, priority desc;

答案 2 :(得分:-1)

您可以尝试:-

SELECT id, height, max(priority)
from test
group by height