题目:不同产品的月销售额
给定一个包含每月销售数据的表,编写一个查询以找到每个产品在每个月销售的总金额,并将每个产品作为输出表中的单独列。
示例:
输入:
monthly_sales
表格
month | product_id | amount_sold |
---|---|---|
2021-01-01 | 1 | 100 |
2021-01-01 | 2 | 300 |
2021-02-01 | 3 | 200 |
2021-03-01 | 4 | 250 |
输出:
month | 1 | 2 | 3 | 4 |
---|---|---|---|---|
2021-01-01 | 100 | 300 | 0 | 0 |
2021-02-01 | 0 | 0 | 200 | 0 |
2021-03-01 | 0 | 0 | 0 | 250 |
答案
解题思路
这是一个经典的行转列问题,我们可以使用条件聚合和条件求和来生成输出表格。
——使用 SUM()
函数和 CASE
表达式,根据 product_id
条件聚合和条件求和每个产品的销售金额,并将每个产品作为输出表格的单独列。
答案代码
SELECT
month,
SUM(CASE WHEN product_id = 1 THEN amount_sold ELSE 0 END) AS '1',
SUM(CASE WHEN product_id = 2 THEN amount_sold ELSE 0 END) AS '2',
SUM(CASE WHEN product_id = 3 THEN amount_sold ELSE 0 END) AS '3',
SUM(CASE WHEN product_id = 4 THEN amount_sold ELSE 0 END) AS '4'
FROM
monthly_sales
GROUP BY month;
代码汇总
--创建表格
CREATE TABLE monthly_sales (
month DATE,
product_id INT,
amount_sold INT
);
-- 插入数据
INSERT INTO monthly_sales (month, product_id, amount_sold) VALUES
('2021-01-01', 1, 100),
('2021-01-01', 2, 300),
('2021-02-01', 3, 200),
('2021-03-01', 4, 250);