如何在bigquery中按月/年汇总

Posted

技术标签:

【中文标题】如何在bigquery中按月/年汇总【英文标题】:how to aggregate by month/year in bigquery 【发布时间】:2020-07-30 04:16:44 【问题描述】:

我需要按邮政编码、月、年计算记录和分组。我当前的sql:

select
Property_Zip
  , count(Distinct Listing_Tracking_ID)   LISTINGCOUNT
  , round(avg( Current_Listing_Price), 2) AVGPRICE
  , FORMAT_DATE('%m', Current_Original_Listing_Date) MONTH
  , FORMAT_DATE('%Y', Current_Original_Listing_Date) YEAR
from `PROJECT.DS.TABLE`
group by Property_Zip
  , FORMAT_DATE('%m', Current_Original_Listing_Date)
  , FORMAT_DATE('%Y', Current_Original_Listing_Date)

我的问题是,月份和年份的结果都是空值。我的问题是我在标准 SQL 中找不到 month() 函数。

我该怎么做? 谢谢!

#更新日期 1 试过这个:

select
Property_Zip
  , count(Distinct Listing_Tracking_ID)   LISTINGCOUNT
  , round(avg( Current_Listing_Price), 2) AVGPRICE
  , EXTRACT(MONTH FROM Current_Original_Listing_Date) MONTH
  , EXTRACT(YEAR FROM Current_Original_Listing_Date) YEAR
from `mother-216719.VALUATION.MLS`
group by Property_Zip, DATE_TRUNC(Current_Original_Listing_Date, MONTH)

错误:SELECT 列表表达式引用了 Current_Original_Listing_Date 列,该列在 [5:24] 既不分组也不聚合

【问题讨论】:

你不能在一个 /same 查询中结合我的答案中的不同方法 - 你使用 EXTRACT 或 DATE_TRUNC !!! 好的。按月份和年份分组时如何获取月份和年份? 在我的回答中看到 - 我刚刚添加了它 - 抱歉,我认为这很明显,所以我最初跳过显示整个查询 【参考方案1】:

您应该使用 EXTRACT 函数(假设 Current_Original_Listing_Date 字段是 DATE 数据类型

EXTRACT(MONTH FROM Current_Original_Listing_Date)    

EXTRACT(YEAR FROM Current_Original_Listing_Date)    

所以,您的查询可能看起来像

select
  Property_Zip
  , count(Distinct Listing_Tracking_ID)   LISTINGCOUNT
  , round(avg( Current_Listing_Price), 2) AVGPRICE
  , EXTRACT(MONTH FROM Current_Original_Listing_Date) MONTH
  , EXTRACT(YEAR FROM Current_Original_Listing_Date) YEAR
from `PROJECT.DS.TABLE`
group by Property_Zip
  , EXTRACT(MONTH FROM Current_Original_Listing_Date)
  , EXTRACT(YEAR FROM Current_Original_Listing_Date)

作为替代方案 - 您可以使用 DATE_TRUNC 函数将日期字段截断为 MONTH - DATE_TRUNC(Current_Original_Listing_Date, MONTH) - 在这种情况下,您只需按一个字段分组

在这种情况下是

select
  Property_Zip
  , count(Distinct Listing_Tracking_ID)   LISTINGCOUNT
  , round(avg( Current_Listing_Price), 2) AVGPRICE
  , DATE_TRUNC(Current_Original_Listing_Date, MONTH) YEAR_MONTH
from `PROJECT.DS.TABLE`
group by Property_Zip,
  DATE_TRUNC(Current_Original_Listing_Date, MONTH)

【讨论】:

以上是关于如何在bigquery中按月/年汇总的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中按外键分组?

在 bigquery 中按月显示数据

LINQ:在日期时间字段中按月和年分组

如何按月汇总销售额并进行比较

linq 里按月查询汇总

如何在 presto SQL 中按月分组