如何在postgreSQL中按日期列分组得到最大列数

如何在postgreSQL中按日期列分组得到最大列数,postgresql,Postgresql,第一次在这里张贴海报,不确定我的标题是否真的勾勒出我在这里寻找的东西 我正试图获得以下信息: 一年中哪一个月每种房产类型的平均收入最高 我有两个表,其中包含我正在使用的以下字段: calendar_metric period (this is a date, formatted 'yyyy-mm-dd' revenue airbnb_property_id property property_type airbnb_property_id 我已经找到了如

第一次在这里张贴海报,不确定我的标题是否真的勾勒出我在这里寻找的东西

我正试图获得以下信息:

一年中哪一个月每种房产类型的平均收入最高

我有两个表,其中包含我正在使用的以下字段:

calendar_metric
    period (this is a date, formatted 'yyyy-mm-dd'
    revenue
    airbnb_property_id
property
    property_type
    airbnb_property_id
我已经找到了如何显示月份、物业类型和平均收入的方法,但我认为在正确分组时遇到了困难

select
    extract(month from calendar_metric.period) as month,
    property.property_type,
    avg(calendar_metric.revenue) as average_revenue
from
    calendar_metric
inner join property on
    calendar_metric.airbnb_property_id = property.airbnb_property_id
group by
    month,
    property_type
我希望它输出的内容如下所示:

month | property_type | max_average_revenue
---------------------------------------------
   1  |   place       | 123
   2  |   floor apt   | 535
   3  |   hostel      | 666
   4  |   b&b         | 363
   5  |   boat        | 777
   etc|   etc         | etc
但目前我得到的是:

month-property_type | max_average_revenue
---------------------------------------------
   1  |   place       | 123
   2  |   floor apt   | 535
   1  |   place       | 444
   4  |   b&b         | 363
   4  |   b&b         | 777
   etc|   etc         | etc
所以本质上,当我从一个日期戳中提取月份时,月份是重复的,数据集跨越5年左右,我可能分组不对?我知道我可能遗漏了一些简单的东西,但我似乎不知道如何正确地做到这一点

救命啊

您应该按年-月进行分组,因为您试图查看5年期


我认为你的查询基本上是存在的,它只是返回所有月份,而不是过滤掉你不想要的行。我倾向于用这个来做这类事情,比如:

在属性类型上选择DISTINCT p、 属性类型,从cm提取月份。期间为月份, avgcm.作为收入的收入 从日历度量单位到厘米 使用airbnb_属性_id将属性连接为p 按属性类型、月份分组 按财产类型、收入说明排序; 我把你的问题缩短了一点,希望它对你仍然有意义

使用CTE,您可以通过两个步骤来表达这一点,这两个步骤可能更容易理解:

结果如下 选择p.property_类型,从cm.period中提取月份作为月份, avgcm.作为收入的收入 从日历度量单位到厘米 使用airbnb_属性_id将属性连接为p 按属性类型、月份分组 在属性类型上选择DISTINCT 财产类型、月份、收入 根据结果 按财产类型、收入说明排序;
select
    extract(month from calendar_metric.period) as month,
    property.property_type,
    avg(calendar_metric.revenue) as average_revenue
from
    calendar_metric
inner join property on
    calendar_metric.airbnb_property_id = property.airbnb_property_id
group by
    extract(year from period),
    month,
    property_type