【问题标题】:PostgreSQL Using multiple columns to calculate numbers for a percentagePostgreSQL 使用多列计算百分比的数字
【发布时间】:2017-08-14 20:57:46
【问题描述】:

我对 SQL 非常陌生,并且一直在努力解决一个非常基本的问题。我尝试了几种不同的方法,但到目前为止没有任何效果。

所以在我的旅游数据表中,我有 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 years”,我试图用子查询来做,但我想不通。

如果有人能帮助我解决这个问题,我将不胜感激!

【问题讨论】:

    标签: sql postgresql group-by percentage


    【解决方案1】:

    您可以使用窗口函数来做到这一点:

    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;
    

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 2023-02-11
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2021-08-25
      相关资源
      最近更新 更多