以下查询返回两列 - dateOfBusiness ,日期时间和 salesOnDate , int 。这是一家商店生成的销售,每天都有一个区号storeId。结果集包含500-600行。
我想获得一个月的平均销售额,即销售额的平均值。我想使用子查询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
我想将salesOnDate总结为任何一段时间,比如一个月。
答案 0 :(得分: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
好的,考虑到您的问题的编辑,请尝试:
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
答案 1 :(得分: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