我有一個存儲管道以及日期和城市的表格。我需要按城市和安裝年份計算管道的長度總和和百分比。PostgreSQL窗口函數問題:詢問GROUP BY
下面是我在尋找的結果:
city | install_year | length | percentage
---------+------------------+------------+---------------
A | 2014 | 90 | 32.14
A | 2013 | 70 | 25.00
A | 2012 | 120 | 42.85
B | 2010 | 325 | 100.0
我建立一個測試表,此腳本:
CREATE TABLE pipes (gid serial NOT NULL, city TEXT, install_year INTEGER, length INTEGER) ;
INSERT INTO pipes (city, install_year, length) VALUES ('A',2014,10), ('A',2014,20), ('A',2014,60), ('A',2013,70), ('A',2012,120), ('B',2010,325) ;
爲了實現我的查詢,我用一個窗口函數來計算管道「長度總和每個城鎮,如下:
SELECT
city,
install_year,
sum(length) AS length,
(sum(length)*100/sum(length) OVER (PARTITION BY city)) AS percentage
FROM pipes
GROUP BY city, install_year
ORDER BY city, install_year DESC ;
我得到一個錯誤信息,要求我加列‘長’到t他的GROUP BY子句,根本沒有給出相同的結果(我不想按長度分組,這是沒有意義的)。
任何人有一個想法做不同?恐怕我將不得不使用WITH mytable AS (...) SELECT ...
的臨時表。
'總和(長)* 100 /總和(長)'始終是100,這可能不是你想要的。 –