2015-04-03 107 views
0

假設我有一個像這樣的Postgres的一個表:匯聚/ SUM SQL

id, name, area, value_1, value_2 
1, Bob, 123.4, 45, 50 
2, Bob, 45.1, 30, 30 
3, Ross, 234, 40, 40 

我試圖做這樣的事情:

select SUM(area) as total_area, 
name, 
SUM(value_1) as sum_value_1, 
SUM((1.0 - (value_1/100.0 * value_2/100.0) * (area/total_area))) as normalized_value 
from my_tbl 
group by name 

這顯然是不行的,因爲total_area沒有定義。我猜猜某種嵌套選擇可能工作?有任何想法嗎?

+1

什麼是邏輯?你期望的結果是什麼? – fthiella 2015-04-03 20:58:55

回答

1

如果我正確理解你的邏輯,你可以使用一些窗函數成沿子查詢的所有其他非聚集列計算的總面積,然後總的名稱(total_area):

SELECT 
    name, 
    total_area, 
    SUM(value_1) AS sum_value_1, 
    SUM((1.0 - (value_1/100.0 * value_2/100.0) * (area/total_area))) as normalized_value 
FROM (
    SELECT 
    name, 
    area, 
    SUM(area) OVER (partition BY name) as total_area, 
    value_1, 
    value_2 
    FROM 
    my_tbl 
) s 
GROUP BY 
    name, total_area 

請看到一個小提琴here