2017-12-27 455 views
1

我正在嘗試獲得銷售額,銷售計數,平均銷售價格,市場中位數和每個月的中間銷售價格從銷售數據年通過下文提到的查詢:需要SUM,AVG,COUNT of results GROUPED BY month and year only

SELECT CAST(MNTH AS VARCHAR(2)) +'-'+ CAST(YR AS VARCHAR(4)) AS 'MONTH-YEAR', YR, MNTH, 
    MAX(dol_vol) AS 'Dol. Vol.', 
    MAX(no_sales) AS '# of Sales', 
    MAX(avg_price) AS 'Average Price', 
    MAX(med_price) AS 'Median Price', 
    MAX(med_days) AS 'Median Days' 
FROM (SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    SUM(sale_price) dol_vol, 
    COUNT(sale_price) no_sales, 
    AVG(sale_price) avg_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY sale_price) OVER (PARTITION BY year(dt), month(dt)) med_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY days_mkt) OVER (PARTITION BY year(dt), month(dt)) med_days 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000) d 
GROUP BY YR, MNTH 
ORDER BY YR, MNTH; 

但是,我得到下面提到的錯誤:

Msg 8120, Level 16, State 1, Line 7 
Column 'Sales_Data.dt' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

現在,如果我嘗試添加GROUP BY條件「DT」列在子查詢中,我也爲sale_price和days_mkt列獲得相同的錯誤。如何獲取資源

回答

1

試試這個:

SELECT CAST(MNTH AS VARCHAR(2)) +'-'+ CAST(YR AS VARCHAR(4)) AS 'MONTH-YEAR', YR, MNTH, 
    MAX(dol_vol) AS 'Dol. Vol.', 
    MAX(no_sales) AS '# of Sales', 
    MAX(avg_price) AS 'Average Price', 
    MAX(med_price) AS 'Median Price', 
    MAX(med_days) AS 'Median Days' 
FROM 
(
    SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    NULL dol_vol, 
    NULL no_sales, 
    NULL avg_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY sale_price) OVER (PARTITION BY year(dt), month(dt)) med_price, 
    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY days_mkt) OVER (PARTITION BY year(dt), month(dt)) med_days 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000 

    UNION ALL 

    SELECT YEAR(dt) YR, MONTH(dt) MNTH, 
    SUM(sale_price) dol_vol, 
    COUNT(sale_price) no_sales, 
    AVG(sale_price) avg_price, 
    NULL, 
    NULL 
    FROM Sales_Data 
    WHERE status='sld' AND year(dt)>='2000' AND sale_price>1000 
    GROUP BY YEAR(dt) 
      ,MONTH(dt) 

) d 
GROUP BY YR, MNTH 
ORDER BY YR, MNTH; 

在我們需要確切地告訴引擎由列/值由組內查詢。