2017-03-22 8 views
0

私はSQLにはとても新しく、かなり基本的な問題に苦しんでいます。私はこれをいくつかの方法でやろうとしましたが、これまでのところ何も働いていません。PostgreSQL複数のカラムを使用してパーセンテージの数値を計算する

私のテーブルのtouristdataには、transportType、month、year、countの4つの列があります。例:

Month Year Transport Type Count 
Nov 1992 Car    100 
Nov 1992 Plane   250 
Dec 1992 Car    200 
Dec 1992 Plane   250 
Jan 1993 Car    200 
Jan 1993 Plane   200 

実際には4つの異なる輸送タイプとそれ以上の月と年があります。

私は年間を通して使用された各輸送のパーセンテージを計算したいと思います。私はエラーを取得する。この形式では

WITH t1 as(
select transport, SUM(ncount) AS transportTotal 
from touristdata 
GROUP BY transport) 
SELECT years, touristdata.transport, ROUND(100.0 *(transportTotal/SUM(ncount))) 
FROM touristdata, t1 
GROUP BY years; 

:私の現在のコードは次のようになります

Year Transport Type Percentage 
1992 Car    37.5% 
1992 Plane   62.5% 
1993 Car    50% 
1993 Plane   50% 

ERROR: column "touristdata.transport" must appear in the GROUP BY clause or be used in an aggregate function 
LINE 5: SELECT years, touristdata.transport, ROUND(100.0 *(transpor... 

しかし、私ので、私の所望の出力は、の線に沿って何かだろうtouristdata.transportとtransportTotalをGROUP BYに追加するとどちらもうまくいきません。私はそれを確かめようとしました。そして、1年ごとに各輸送タイプごとに4つのエントリーがありました。

私は前回の「GROUP BY years」の前にいなかったので、サブクエリを使ってやってみましたが、わかりませんでした。

誰かが私の頭の中で私がこれを本当に感謝してくれるのを助けることができたら!

答えて

0

あなたは、この使用してウィンドウ機能の操作を行うことができます助けを

SELECT td.years, td.transport, SUM(ncount), 
     SUM(ncount)/SUM(1.0*SUM(ncount)) OVER (PARTITION BY year) as ratio 
FROM touristdata td 
GROUP BY td.years, td.transport; 
+0

おかげで、これは私のために働きました。 –

関連する問題