簡體   English   中英

Postgres:根據另一列中的列表獲取總和

[英]Postgres: Get sum based on list in another column

我有一張桌子,位置如下:

地點 子位置
一個 A,a1,a2,a3
B,b1,b3

和另一張桌子,像這樣的時間

地點 小時
一個 2
3
一個 4
a1 1
a1 1
b3 8

對於每個位置,我需要獲取 sub_locations 的總小時數。

我正在尋找的結果是這樣的:

地點 子位置 全部小時數
一個 A,a1,a2,a3 8
B,b1,b3 11

我可以通過簡單的連接和按位置分組來簡單地獲得該位置的總和,但我需要的是所有子位置的總小時數。 我已經探索過對 total_hours 列使用另一個 select 語句,但結果為空。

select 
l.location,
l.sub_locations,
sum(h.hours::float) as "sum plan hours for location"
from 
locations l 
join
hours h 
on l.location = h.location 
group by l.location,l.sub_locations

您可以將可怕的逗號分隔字符串轉換為數組並在 JOIN 條件中使用它:

select l.location, l.sub_locations, sum(h.hours)
from locations  l 
 join hours h on h.location = any(string_to_array(l.sub_locations, ','))
group by l.location, l.sub_locations;

更好的解決方案是修復您的數據 model 並創建適當的一對多關系,該關系不會在 CSV 列中存儲位置/子位置。

我認為這將為您完成工作,或者如果不告訴我結果,那么我可以再次寫更多信息。

  select  
    l.location,
    l.sub_locations,
    sum(h.hours::float) as "sum plan hours for location"
    from 
    locations l 
    join
    hours h 
    on l.location = h.location 
    WHERE h.location In (select sub_locations from locations where location = 'Your Location value(ex-A)')
    group by l.location,l.sub_locations

希望能幫助到你

暫無
暫無

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

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