[英]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
4
或5
的recipe_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.