0

我需要按邮政编码、月、年计算记录和分组。我当前的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] 既不分组也不聚合

4

1 回答 1

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)
于 2020-07-30T04:55:56.920 回答