2013-04-11 44 views
0

下面的查詢將返回兩列 - dateOfBusiness,一個日期時間salesOnDate,一個INT。這是由一家商店每天使用區號storeId生成的銷售額。結果集由500-600行組成。需要幫助進行查詢

我想獲得一個月的平均銷售額,即做salesOnDate的平均值。我想使用子查詢as shown in this SO question。但它不適合我。我該怎麼做呢 ?

select count(salesOnDate) 
from dbo.localSales 
where productName like '%juice%' 
and storeId = 'MUN123' 
group by dateOfBusiness 

我試圖做這樣,但它不工作 -

select sum(x.count) 
from 
(
    select count(id) as 'count' 
    from table 
) x 

其他信息 -

表結構 -

dateOfBusiness | salesOnDate 
------------------------------- 
2013-10-5 | 200 
2013-10-6 | 100 
2013-10-7 | 700  

我想sum salesOnDate爲任何時間段,比如說一個月。

+0

你能表現出一定的樣本數據和你期望的結果? – EricZ 2013-04-11 19:31:35

+0

@EricZ - 添加樣本數據 – 2013-04-11 19:50:07

回答

1

這會給你每月的平均銷售額與總沿銷售額當月號:

-- can use DATEPART instead of DATENAME if you prefer numbered months (i.e., 1 = January, 2 = February, etc.) 
SELECT DATENAME(month, dateOfBusiness) [Month], SUM(salesOnDate) [TotalSales], AVG(salesOnDate) [AverageSales] 
FROM dbo.localSales 
WHERE productName like '%juice%' 
AND storeId = 'MUN123' 
GROUP BY DATENAME(month, dateOfBusiness) 

查詢的重要組成部分,是DATENAME(或DATEPART如果使用該函數)函數,它只會從日期列中獲取特定信息,而不是整個值。

例如,LAT說,你有三個記錄爲2013年4月11日

dateOfBusiness  salesOnDate 
--------------------- ----------- 
2013-04-11 08:03:24  5 
2013-04-11 11:45:17  1 
2013-04-11 20:23:52  3 

使用上面的查詢將展示他們歸爲一月份:

 Month   TotalSales  AverageSales 
----------------- -------------- ---------------- 
    April    9    3 
+0

請參閱編輯的問題。我想使用子查詢代替代碼。 – 2013-04-11 19:52:59

1

您確定不需要sum(salesOnDate)而不是count(salesOnDate)? Count返回行數,sum將返回所有行值的總和。 的平均功能AVG,所以你可以說:

select 
      dateOfBusiness,storeId , 
      count(salesOnDate), sum(salesOnDate), avg(salesOnDate) 
    from 
      dbo.localSales 
    where 
      productName like '%juice%' 
      and storeId = 'MUN123' 
    group by 
      dateOfBusiness,storeId 

OK,給編輯自己的問題,請嘗試:

select 
    storeId , dob_yr, dob_mo, count(salesOnDate), sum(salesOnDate), avg(salesOnDate) 
from (
     select 
       dateOfBusiness,storeId , year(dateOfBusiness) as dob_yr, 
       month(dateOfBusiness) as dob_mo, 
       salesOnDate 
     from 
       dbo.localSales 
     where 
       productName like '%juice%' 
       and storeId = 'MUN123' 
) t 
group by 
    storeId , dob_yr, dob_mo 
+0

beth,實際上我想使用子查詢來做到這一點。我想在這種情況下學習如何使用子查詢。 – 2013-04-11 19:46:47