需要帮助才能进行查询

时间:2013-04-11 19:26:07

标签: sql sql-server sql-server-2008

以下查询返回两列 - 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总结为任何一段时间,比如一个月。

2 个答案:

答案 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