前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 计算累积销售额

SQL 计算累积销售额

作者头像
白日梦想家
发布2020-09-08 11:31:18
2.7K0
发布2020-09-08 11:31:18
举报
文章被收录于专栏:SQL实现SQL实现

有一张销售记录表 t_sales,它记录了公司在某个年份的销售记录。由于一些原因,目前只能看到两个字段:month 和 quantity,它们分别对应的中文描述是月份和售额。

t_sales 的数据如下:

代码语言:javascript
复制
 month  quantity  
------  ----------
     1         100
     1         300
     2         200
     3         300
     4         400
     5         300
     5         500
     6         600
     7         600
     8         600
     9         600
    10         700
    11         800
    12         900

注意,在一个月里面是可以产生多条销售记录。

现在,我们希望从这份数据中统计出「总销售额」「月销售额」「当前累积销售额」,统计的结果如下:

代码语言:javascript
复制
 月份    销售额     总销售额   月销售额   累积销售额   
------  --------  --------  ---------  --------
     1       100    6900       400       400     
     1       300    6900       400       400     
     2       200  6900       200       600     
     3       300  6900       300       900     
     4       400  6900       400       1300    
     5       300  6900       800       2100    
     5       500  6900       800       2100    
     6       600  6900       600       2700    
     7       600  6900       600       3300    
     8       600  6900       600       3900    
     9       600  6900       600       4500    
    10       700  6900       700       5200    
    11       800  6900       800       6000    
    12       900  6900       900       6900                   

解决方案

统计总销售额可以使用 SELECT SUM(quantity) FROM t_sales

统计月销售额可以使用 SELECT month,SUM(quantity) FROM t_sales GROUP BY month

统计当前累积销售额使用:

代码语言:javascript
复制
SELECT
  (SELECT
    SUM(quantity)
  FROM
    t_sales
  WHERE MONTH <= a.month) AS '累积销售额'
FROM
  t_sales a

再使用原表分别去关联这些统计结果,完整的 SQL 如下:

代码语言:javascript
复制
SELECT
  a.month AS '月份',
  a.quantity AS '销售额',
  (SELECT
    SUM(quantity)
  FROM
    t_sales) AS '总销售额',
  c.amount AS '月销售额',
  (SELECT
    SUM(quantity)
  FROM
    t_sales
  WHERE MONTH <= a.month) AS '累积销售额'
FROM
  t_sales a
  LEFT JOIN
    (SELECT
      MONTH,
      SUM(quantity) AS amount
    FROM
      t_sales
    GROUP BY MONTH) c
    ON c.month = a.month

如果使用窗口函数,整个 SQL 的实现会简洁很多。

sum(quantity)over() 统计出总销售额;

sum(quantity) over(PARTITION by month) 统计月销售额;

sum(quantity) over(order by month) 统计当前累积销售额。

具体的 SQL 如下:

代码语言:javascript
复制
SELECT
  MONTH AS '月份',
  quantity AS '销售额',
  SUM(quantity) over () AS '总销售额',
  SUM(quantity) over (PARTITION BY MONTH) AS '月销售额',
  SUM(quantity) over (
ORDER BY MONTH) AS '累积销售额'
FROM
  t_sales
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档