按月分组的运行计数以汇总销售额

Posted

技术标签:

【中文标题】按月分组的运行计数以汇总销售额【英文标题】:Running count grouped by month to aggregate sales 【发布时间】:2017-09-11 12:37:52 【问题描述】:

我有一个带有字段 Datatime(DateTime) 和 sales(Number) 的销售表。 如何编写一个 SQL 查询来获取过去 6 个月按月份分组的数据,其中包含一个新列“运行计数”。

运行计数是一个正整数,从 1 开始(如果销售额为 0),然后如果下个月有销售则为 2(假设有销售并且上个月的运行计数为 1)等等。如果一个月没有销售,则该月的计数将为 0,如果下个月有销售,则以 1 重新开始,依此类推。

示例: 当前月份年份是“09/2017”,3 月、4 月、6 月、7 月、8 月有销售,但 5 月份没有销售(无行)。 所以输出将是:

| Month_Year | Sum(Sales) | Running_Count |
| 03/2017    | 1000       | 1             |
| 04/2017    | 1500       | 2             |
| 05/2017    | 0          | 0             |
| 06/2017    | 300        | 1             |
| 07/2017    | 550        | 2             |
| 08/2017    | 1900       | 3             |

欢迎提出修改此问题的建议。

【问题讨论】:

你的问题是什么? 也许这个问题对你有帮助***.com/questions/8345282/sql-server-group-by-month 附注:FLOAT???当您有可用的精确类型(即 NUMBER)时,为什么要使用近似数据类型? NUMBER 中的 38 位可能数字不足以满足您庞大的销售数字吗?我建议你改变这个。非绝对必要时不要使用 FLOAT。 @ThorstenKettner 谢谢,我已经更新了。 @kenfire 我知道如何按月分组。我的问题是如何实现运行计数部分。 【参考方案1】:

这很丑……但它有效:

WITH
    aset
    AS
        (SELECT month_year
              , sales
              , CASE WHEN COALESCE (LAG (sales) OVER (ORDER BY month_year), 0) = 0 THEN 1 ELSE 0 END COUNT
           FROM deleteme_table),
    bset
    AS
        (SELECT month_year, sales, SUM (COUNT) OVER (ORDER BY month_year) count_group
           FROM aset)
SELECT month_year
     , sales
     , CASE
           WHEN sales = 0
           THEN
               0
           ELSE
               ROW_NUMBER ()
                   OVER (
                       PARTITION BY count_group ORDER BY month_year
                   )
       END
           running_count
  FROM bset;

SALES  MONTH_YEAR RUNNING_COUNT                          
1000   2017/03/01     1                                      
1500   2017/04/01     2                                      
0      2017/05/01     0                                      
300    2017/06/01     1                                      
550    2017/07/01     2                                      
1900   2017/08/01     3        

【讨论】:

以上是关于按月分组的运行计数以汇总销售额的主要内容,如果未能解决你的问题,请参考以下文章

如何按月汇总销售额并进行比较

按月分组销售额 - Rails

MySql Group 并按月汇总每个部门全年的销售额,加入多个表

NSFetchRequest 按月分组

按月对记录进行分组并计数 - Mongoose、nodeJs、mongoDb

SQL Server 2008 R2-查询以获取按月销售的总销售额和数量