簡體   English   中英

Postgres嵌套查詢並保持順序

[英]Postgres Nested Query and keeps the order

我有兩個查詢,想合並為一個。

查詢1(偽代碼):

recipe_titles = select recipe_title
             from recipe
             where nutrient_id in (4,5)
             group by recipe_title
             order by sum(nutrient_amount) desc

然后,我想將每個recipe_title用於 select 整個配方行:

查詢 2(偽代碼):

select * from recipe where recipe_title = recipe_titles[n].    (n is 1, then 2, then 3...)

如果第一個查詢返回 100 recipe_title ,我將不得不運行第二個查詢 100 次,效率不高。

有沒有辦法在一個查詢中進行這兩個選擇?

由於訂單丟失, IN不適用於我的情況:

select * from recipe where recipe_title in recipe_titles. (Not work)

您可以使用 window 函數。 我會推薦一個 window 有條件的 window sum() ,然后您可以將其用於過濾和排序:

select *
from (
    select 
        r.*,
        sum(nutrient_amount) 
            filter(where nutrient_id in (4,5)) 
            over(partition by recipe_title) as sum_nutrient_amount
    from recipe r
) t
where sum_nutrient_amount > 0
order by sum_nutrient_amount desc, recipe_title, nutrient_id 

另一方面,如果您不需要過濾具有nutrient_id 45recipe_title ,則不需要子查詢:

select r.* 
from recipe r
order by 
    sum(nutrient_amount) 
        filter(where nutrient_id in (4,5)) 
        over(partition by recipe_title) desc,
    recipe_title, 
    nutrient_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM