我是SQL的新手,我一直在努力解决一个非常基本的问题。我试图通过几种不同的方式来实现,但到目前为止还没有任何工作。
所以在我的表touristdata中我有4列:transportType,month,year和count。例如:
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
除了我实际上有四种不同的运输类型,还有更多的月份和年份。
我想计算多年来使用的每种运输的百分比。所以我想要的输出将是:
Year Transport Type Percentage
1992 Car 37.5%
1992 Plane 62.5%
1993 Car 50%
1993 Plane 50%
我目前的代码如下:
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;
在此表单中,我收到错误:
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也不会有效。我试过这个以确保每年每种传输类型最终有4个条目。
我之前没有最后的'GROUP BY年',我尝试用子查询来做,但我无法理解。
如果有人能帮助我解决这个问题,我真的很感激!
答案 0 :(得分: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;