下面的查询返回两列:dateOfBusiness,a datetime和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 我想把salesOnDate相加一段时间,比如说一个月。
发布于 2013-04-11 19:41:28
这将给出按月平均销售额以及该月份的总销售额:
-- 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 ),它将只从date列获取特定信息,而不是整个值。
例如,拉特说你有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发布于 2013-04-11 19:34:42
您确定不需要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_mohttps://stackoverflow.com/questions/15957159
复制相似问题