如何在bigquery中按月/年汇总

时间:2020-07-30 04:16:44

标签: google-bigquery

我需要计算记录并按邮政编码,月份,年份分组。我当前的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()函数。

我该怎么做? 谢谢!

#UPdate 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]聚集

1 个答案:

答案 0 :(得分:0)

您应该使用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)
相关问题