首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql:计算客户在一段时间内订购产品的平均时间

问Sql:计算客户在一段时间内订购产品的平均时间
EN

Stack Overflow用户
提问于 2012-02-27 18:53:27
回答 2查看 364关注 0票数 0

你如何计算一个产品在一周、一个月、一年中平均销售了多少次?

我感兴趣的不是数量,而是客户购买了给定产品的次数。

OrderLine

代码语言:javascript
复制
 OrderNo | ProductNo | Amount |
----------------------------------------
       1 |         1 |     10 |
       1 |         4 |      2 |
       2 |         1 |      2 |
       3 |         1 |      4 |

订单

代码语言:javascript
复制
     OrderNo | OrderDate
  ----------------------------------------
           1 | 2012-02-21
           2 | 2012-02-22
           3 | 2012-02-25

这是我正在寻找的输出

代码语言:javascript
复制
ProductNo | Average Orders a Week | Average Orders a month |
------------------------------------------------------------
        1 |                     3 |                     12 |
        2 |                     5 |                     20 |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-27 20:24:20

这是DRapp答案的一个副本,但是为SQL Server编写的(它太大了,无法进行注释!)

代码语言:javascript
复制
SELECT PreCount.ProductNo,
       PreCount.TotalCount / PreCount.CountOfYrWeeks AS AvgPerWeek,
       PreCount.TotalCount / PreCount.CountOfYrMonths AS AvgPerMonth,
       PreCount.TotalCount / PreCount.CountOfYears AS AvgPerYear
FROM   (SELECT OL.ProductNo,
               Count(*) TotalCount,
               Count(DISTINCT Datepart(wk, O.OrderDate)) AS CountOfYrWeeks,
               Count(DISTINCT Datepart(mm, O.OrderDate)) AS CountOfYrMonths,
               Count(DISTINCT Year(O.OrderDate)) AS CountOfYears
        FROM   OrderLine OL  JOIN [Order] O
                 ON OL.OrderNo = O.OrderNo
        GROUP  BY OL.ProductNo) PreCount
票数 1
EN

Stack Overflow用户

发布于 2012-02-27 20:15:16

你必须首先按照你想要的平均方法对它进行分组和计数。为了区分第1年和第2年,我会将事务的year()添加到分组限定符中以进行区分。例如2010年1月的销售额与2011年的销售额与2012年的销售额...同样,2010年的第1周,2011和2012年的第1周,而不是将所有3年都算作一周。

如果您使用的是MySQL,则可以执行以下操作

代码语言:javascript
复制
select
      PreCount.ProductNo,
      PreCount.TotalCount / PreCount.CountOfYrWeeks as AvgPerWeek,
      PreCount.TotalCount / PreCount.CountOfYrMonths as AvgPerMonth,
      PreCount.TotalCount / PreCount.CountOfYears as AvgPerYear
   from
      ( select
              OL.ProductNo,
              count(*) TotalCount,
              count( distinct YEARWEEK( O.OrderDate ) ) as CountOfYrWeeks,
              count( distinct Date_Format( O.OrderDate, "%Y%M" )) as CountOfYrMonths,
              count( distinct Year( O.OrderDate )) as CountOfYears
           from
              OrderLine OL
                 JOIN Order O
                    on OL.OrderNo = O.OrderNo
           group by
              OL.ProductNo ) PreCount
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9463773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档