mysql - 如果满足条件,则将列的总和分配给另一列中一个日期的月份
问题描述
CREATE TABLE sales (
id int auto_increment primary key,
customerID VARCHAR(255),
sales_date DATE,
sales_volume INT,
annual_unqiue_count INT
);
INSERT INTO sales
(customerID, sales_date, sales_volume, annual_unqiue_count)
VALUES
("Customer_01", "2020-03-01", "600", "1"),
("Customer_01", "2020-03-25", "315", "0"),
("Customer_02", "2020-03-18", "208", "1"),
("Customer_02", "2020-07-25", "140", "0"),
("Customer_03", "2020-10-18", "400", "1"),
("Customer_03", "2020-12-06", "500", "0"),
("Customer_03", "2020-12-18", "438", "0"),
("Customer_03", "2020-12-25", "917", "0");
预期结果:
customerID sales_date SUM(annual_unqiue_count) SUM(sales_volume) sales_volume
Customer_01 3 1 600 915
Customer_01 3 0 315 0
Customer_02 3 1 208 348
Customer_02 7 0 140 0
Customer_03 10 1 400 2255
Customer_03 12 0 500 0
Customer_03 12 0 438 0
Customer_03 12 0 917 0
结果,我想将SUM(sales_volume)
per分配customer
给month
具有. (注意:每个客户只有一行可以有一个 Annual_unique_account <> 0)sales_date
annual_unqiue_count <> 0
参考这个问题的解决方案,我尝试使用:
SELECT
customerID,
MONTH(sales_date),
SUM(annual_unqiue_count),
SUM(sales_volume),
(CASE WHEN annual_unqiue_count <> 0
THEN SUM(sales_volume) over (PARTITION BY customerId)
ELSE 0 END) AS sales_volume
FROM sales
GROUP BY 1,2;
但是,它并没有给我正确的结果。
你知道我需要改变什么吗?
解决方案
在这种情况下没有理由使用GROUP BY
,因为您想要表的所有行。
使用SUM()
窗口函数获取最后一列:
SELECT customerID,
MONTH(sales_date) sales_date,
annual_unqiue_count,
sales_volume,
annual_unqiue_count *
SUM(sales_volume) OVER (PARTITION BY customerID) total_sales_volume
FROM sales
也许您还需要一个WHERE
子句来过滤特定年份的行?
请参阅演示。
结果:
> customerID | sales_date | annual_unqiue_count | sales_volume | total_sales_volume
> :---------- | ---------: | ------------------: | -----------: | -----------------:
> Customer_01 | 3 | 1 | 600 | 915
> Customer_01 | 3 | 0 | 315 | 0
> Customer_02 | 3 | 1 | 208 | 348
> Customer_02 | 7 | 0 | 140 | 0
> Customer_03 | 10 | 1 | 400 | 2255
> Customer_03 | 12 | 0 | 500 | 0
> Customer_03 | 12 | 0 | 438 | 0
> Customer_03 | 12 | 0 | 917 | 0
推荐阅读
- javascript - Node.js - 将参数从客户端传递到端点
- python - 如何根据另一个数据框中的查找表替换数据框中的值
- javascript - 脚本消息未在 asp.net 中显示
- python-3.x - 从 pandas 中的成对行条目创建一个新列
- python-3.x - 使用 pandas 消除 for 循环
- c# - 使用 c# 泛型扩展方法对类而不是集合进行操作
- python - 如何使用鼠标事件绘制多个多边形
- javascript - 电报机器人_要我用按钮驱动菜单替换文字驱动菜单_修正01
- javascript - 为什么浏览器中有两个阶段的事件传播?
- c# - 如何在不输入用户帐户密码的情况下启动 Windows 服务?