所以,我剛剛問了一個問題:Update using a subquery with aggregates and groupby in Postgres
事實證明,我正在討論我的問題與有缺陷的邏輯。刪除所有行,但每個組的最大值一個
在上述問題的相同情況下,而不是更新所有行以具有最大數量,我想刪除沒有最大數量(和任何重複的最大數量)的行。
本質上,我需要將下面的內容轉換爲只保留每個item_name的最大數量的delete語句。我猜我在這裏需要NOT EXISTS
,但我不確定如何使用聚合函數做到這一點。
UPDATE transaction t
SET quantity = sub.max_quantity
FROM (
SELECT item_name, max(quantity) AS max_quantity
FROM transaction
GROUP BY 1
) sub
WHERE t.item_name = sub.item_name
AND t.quantity IS DISTINCT FROM sub.max_quantity;
是的,'NOT EXISTS()'是要走的路。另一種方法是使用窗口finction枚舉元組。請注意,兩行可以共享相同的MAX()值。 – wildplasser