Postgresql

在主鍵列表中為每個所有者獲取前 3 個子項(項目)

  • October 29, 2018

我有兩個表項目一個所有者,一個從項目到所有者的外鍵,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 子句

引用自:https://dba.stackexchange.com/questions/221239