我有一个包含以下列的表格:
对于每个 order_id,我想找到具有最高金额、最高评级、最高百分比、最低 customer_id 的 doc_id。
对于单个订单 ID,我可以这样做:
select order_id, doc_id
from orders
where order_id = 1625
order by amount desc nulls last,
rating desc nulls last,
percent desc nulls last,
customer_id asc
limit 1;
但我无法完成所有订单。所以输出应该是这样的:
我正在使用 Postgresql。 知道我应该怎么做吗?
最佳答案
使用FIRST_VALUE()
窗口函数:
SELECT DISTINCT order_id,
FIRST_VALUE(doc_id) OVER (
PARTITION BY order_id
ORDER BY amount DESC NULLS LAST, rating DESC NULLS LAST, percent DESC NULLS LAST, customer_id
) doc_id
FROM orders;
请参阅demo .
关于sql - Postgresql 按多个列进行分组并在每个组内进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70670433/