Postgresql
在主鍵列表中為每個所有者獲取前 3 個子項(項目)
我有兩個表項目一個所有者,一個從項目到所有者的外鍵,owner_id。我正在使用 PostgreSQL 10。
對於每個所有者,如果存在,我想獲得前 3 個項目。
select "items_item"."name" FROM "items_item" WHERE ("items_item"."owner_id" IN (64, 65, 130, 99, 43, 140, 108, 143, 115, 154)) ORDER BY LIMIT 3
顯然不行,因為只從所有所有者中選擇 3 件物品,而不是每個所有者最多 3 件物品。
您可以使用視窗函式來解決此類問題,例如:
select item_name from ( select name as item_name , row_number() over (partition by owner_id order by id) as rn from items_item where owner_id in (64, 65, 130, 99, 43, 140, 108, 143, 115, 154) ) as t where rn <= 3
order by id
根據評論,我更新為in window 子句