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

PostgreSQL在一定条件下获得最高值,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,名为test的示例数据库表 我正在尝试获取“最后一个和相同高度”内具有“最高优先级”的行 这是我到目前为止所做的尝试 我首先尝试获取“表中的最高优先级”,并使用下面的查询成功地获得了结果 SELECT * FROM test WHERE priority = (SELECT MAX(priority) FROM test) 现在,我认为这个查询可以工作,但这会抛出一条错误消息 SELECT * FROM test WHERE priority = (SELECT MAX(priority

名为test的示例数据库表

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

这是我到目前为止所做的尝试

我首先尝试获取“表中的最高优先级”,并使用下面的查询成功地获得了结果

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子句中,或在聚合函数中使用


有人能告诉我如何解决这个问题吗?

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

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
您可以尝试:-

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

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

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

您期望的输出是什么?@fa06从示例数据库中,我期望得到行号10
id=10,高度=2,优先级=480
我如何按降序排列高度?我知道了<代码>从测试组中按高度顺序按高度描述限制1选择id、高度、最大(优先级)这是一个无效的组,由usageI使用下面的查询获得<代码>按高度顺序按高度描述限制1从测试组中选择id、高度、最大(优先级)谢谢您的帮助。这会给您id号10吗@很抱歉回信晚了。刚吃完午饭回来。我刚刚运行了这个查询,这需要很长时间。我等了2分钟才停下来。