Sql: подсчитайте среднее количество раз, когда клиенты заказывали продукт за период - PullRequest
0 голосов
/ 27 февраля 2012

Как бы вы посчитали, сколько раз продукт продается в среднем за неделю или месяц, год?

Меня не интересует Сумма, но сколько раз покупатель покупал данный товар.

OrderLine

 OrderNo | ProductNo | Amount |
----------------------------------------
       1 |         1 |     10 |
       1 |         4 |      2 |
       2 |         1 |      2 |
       3 |         1 |      4 |

Заказать

     OrderNo | OrderDate
  ----------------------------------------
           1 | 2012-02-21
           2 | 2012-02-22
           3 | 2012-02-25

Это вывод, который я ищу

ProductNo | Average Orders a Week | Average Orders a month |
------------------------------------------------------------
        1 |                     3 |                     12 |
        2 |                     5 |                     20 |

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Сначала вам нужно будет предварительно сгруппировать его и посчитать для каждого метода усреднения, который вы хотели. Чтобы провести различие между годами 1 и 2, я бы добавил год () транзакции в классификатор группировки для различий. Например, Продажи в январе 2010 г. по сравнению с Продажами в 2011 г. по сравнению с 2012 г. ... аналогично, неделя 1 2010 г., неделя 1 2011 и 2012 гг. Вместо того, чтобы считать все 3 года одной неделей.

Следующее можно сделать, если вы используете MySQL

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
1 голос
/ 27 февраля 2012

Это копия ответа DRapp, но она написана для SQL Server (слишком велика для комментария!)

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
...