[英]Postgres Nested Query for single table
我被困在一個嵌套的數據庫查詢上。 我能得到一些幫助嗎?
我的簡單表如下所示:
食物表:
+----+----------+-------------------------------+
| ID | NAME | nutrientName | NutrientAmount
+----+----------+---------------+---------------+
food1 calcium 200
food1 magnesium 300
food1 phosphorus 400
food2 calcium 220
food2 magnesium 320
food2 phosphorus 430
food3 calcium 230
.............
我用它來獲得前 15 名的營養量:
select NAME from food_table
where nutrientName in ('calcium','magnesium')
group by NAME
order by sum(nutrient_amount) desc
limit 15;
目前,我只有 NAME。 但是,我想以相同的順序獲得食物的所有營養。 如果我再做一個 select,訂單就會丟失。 有沒有辦法以相同的順序獲取食物記錄?
編輯:我創建了一個小提琴:
一種方法是使用 window 函數:
select ft.*
from (select ft.*,
row_number() over (partition by name order by nutrient_amount desc) as seqnum
from food_table ft
where nutrientName in ('calcium','magnesium')
) ft
where seqnum = 1
order by nutrient_amount desc;
以上以單一營養素的最高量返回營養素。 如果你想要兩者兼得,那么:
select ft.*
from (select ft.*,
sum(nutrient_amount) over (partition by name order by nutrient_amount desc) as sum_nutrient_amount
from food_table ft
where nutrientName in ('calcium', 'magnesium')
) ft
order by sum_nutrient_amount desc
limit 15;
或者,如果您只想要數量,那么條件聚合可能就是您想要的:
select name,
sum(case when nutrientName = 'calcium' then nutrient_amount else 0 end) as ca,
sum(case when nutrientName = 'magnesium' then nutrient_amount else 0 end) as mg
from food_table
group by name
order by (ca + mg) desc
limit 15;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.