题解 | 深入分析各款产品年总销售额与竞品的年度对比

描述

【背景】:OPPO 公司为了精准评估产品在 2023 年的市场表现,需要根据以下三个数据表,深入分析各款产品年总销售额与竞品的年度对比。

【原始表】:

oppo_products_detail(OPPO 产品详情)表:

  • product_id (产品 ID): 产品的唯一标识符
  • product_name (产品名称): 产品的名称
  • product_category (产品类别): 固定的(智能手机、平板电脑、智能手表)

sales_info(销售信息)表:

  • sale_id (销售 ID): 销售的唯一标识符
  • product_id (产品 ID): 所属产品的唯一标识符,用于关联 OPPO 产品详情表中的产品
  • sales_channel (销售渠道): 固定的(线上、线下)
  • region (地区): 产品销售的地区
  • quarter_1_sales_amount (第一季度销售额): 产品在该地区、该销售渠道的第一季度销售额
  • quarter_2_sales_amount (第二季度销售额): 产品在该地区、该销售渠道的第二季度销售额
  • quarter_3_sales_amount (第三季度销售额): 产品在该地区、该销售渠道的第三季度销售额
  • quarter_4_sales_amount (第四季度销售额): 产品在该地区、该销售渠道的第四季度销售额

competitor_analysis(竞品)表:

  • analysis_id (分析 ID): 竞品的唯一标识符
  • product_id (产品 ID): 对应的 OPPO 产品的唯一标识符,用于关联 OPPO 产品详情表中的产品
  • competitor_name (竞品名称): 竞品的名称
  • total_competitor_sales_amount_2023 (竞品 2023 年全年销售总金额): 竞品 2023 年全年的销售总金额

【要求】:根据上述表格,查询每个产品在不同地区、不同销售渠道下 2023 年的全年销售总额,以及与主要竞品 2023 年全年销售总金额的差值。结果按照产品 ID 升序排列。要求查询出来的表格的字段如下:

  • product_id (产品 ID): 对应的 OPPO 产品的唯一标识符,用于关联 OPPO 产品详情表中的产品
  • product_name (产品名称): 产品的名称
  • competitor_name (竞品名称): 竞品的名称
  • total_sales_amount_of_product(产品全年4个季度,全销售渠道的销售总金额): 产品 2023 年全年的销售总金额
  • sales_difference_with_competitor(产品和竞品的销售差值):2023年产品和竞品的销售差值

【示例】

oppo_products_detail(OPPO 产品详情)表:

sales_info(销售信息)表:

competitor_analysis(竞品)表:

【按照要求查询出来的表】

【解释】

按照上述示例中的数据,产品ID是1的产品全年总销售额 = 10000+15000+12000+18000+6000+20000+8000+10000 = 99000,竞品的销售总金额是80000,差值是19000

示例1

输入:

复制代码
DROP TABLE IF EXISTS oppo_products_detail ;
DROP TABLE IF EXISTS sales_info;
DROP TABLE IF EXISTS competitor_analysis;
-- 创建表
CREATE TABLE oppo_products_detail (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(50),
    product_category VARCHAR(20)
);

CREATE TABLE sales_info (
    sale_id INT PRIMARY KEY,
    product_id INT,
    sales_channel VARCHAR(10),
    region VARCHAR(20),
    quarter_1_sales_amount DECIMAL(10, 2),
    quarter_2_sales_amount DECIMAL(10, 2),
    quarter_3_sales_amount DECIMAL(10, 2),
    quarter_4_sales_amount DECIMAL(10, 2)
);

CREATE TABLE competitor_analysis (
    analysis_id INT PRIMARY KEY,
    product_id INT,
    competitor_name VARCHAR(50),
    total_competitor_sales_amount_2023 DECIMAL(10, 2)
);

-- 插入数据
INSERT INTO oppo_products_detail (product_id, product_name, product_category)
VALUES (1, 'Find X7', '智能手机'),
       (2, 'Pad Pro 2', '平板电脑');

INSERT INTO sales_info (sale_id, product_id, sales_channel, region, quarter_1_sales_amount, quarter_2_sales_amount, quarter_3_sales_amount, quarter_4_sales_amount)
VALUES (1, 1, '线上', '华北', 10000, 15000, 12000, 18000),
       (2, 2, '线下', '华南', 8000, 10000, 9000, 13000),
       (3, 2, '线下', '华东', 8000, 10000, 9000, 13000),
       (4, 1, '线下', '华东', 6000, 20000, 8000, 10000);

INSERT INTO competitor_analysis (analysis_id, product_id, competitor_name, total_competitor_sales_amount_2023)
VALUES (1, 1, 'Apple iPhone 14', 80000),
       (2, 2, 'Huawei MatePad', 60000);
select * from oppo_products_detail;
select * from sales_info;
select * from competitor_analysis;

复制输出:

复制代码
product_id|product_name|competitor_name|total_sales_amount_of_product|sales_difference_with_competitor
1|Find X7|Apple iPhone 14|99000.00|19000.00
2|Pad Pro 2|Huawei MatePad|80000.00|20000.00
sql 复制代码
with t1 as (
    select distinct sales_info.product_id,sales_channel,region,quarter_1_sales_amount,sum(quarter_1_sales_amount) over  (partition by sales_info.product_id) as t11
         ,sum(total_competitor_sales_amount_2023) over (partition by sales_info.product_id) as t12
    ,product_name,competitor_name
    from sales_info join oppo_products_detail on sales_info.product_id =oppo_products_detail.product_id
    join competitor_analysis on sales_info.product_id=competitor_analysis.product_id
 
), t2 as(
   select distinct sales_info.product_id,sales_channel,region,quarter_2_sales_amount,sum(quarter_2_sales_amount) over  (partition by sales_info.product_id) as t21
,product_name,competitor_name,total_competitor_sales_amount_2023 ,sum(total_competitor_sales_amount_2023) over (partition by sales_info.product_id) as t22
 
    from sales_info join oppo_products_detail on sales_info.product_id =oppo_products_detail.product_id
    join competitor_analysis on sales_info.product_id=competitor_analysis.product_id
    )
,t3 as (
       select distinct sales_info.product_id,sales_channel,region,quarter_3_sales_amount,sum(quarter_3_sales_amount) over  (partition by sales_info.product_id) as t31
,product_name,competitor_name,total_competitor_sales_amount_2023 ,sum(total_competitor_sales_amount_2023) over (partition by sales_info.product_id) as t32
 
    from sales_info join oppo_products_detail on sales_info.product_id =oppo_products_detail.product_id
    join competitor_analysis on sales_info.product_id=competitor_analysis.product_id
 
    ),t4 as (
    select distinct sales_info.product_id,sales_channel,region,quarter_4_sales_amount,sum(quarter_4_sales_amount) over  (partition by sales_info.product_id) as t41
,product_name,competitor_name,total_competitor_sales_amount_2023 ,sum(total_competitor_sales_amount_2023) over (partition by sales_info.product_id) as t42
 
    from sales_info join oppo_products_detail on sales_info.product_id =oppo_products_detail.product_id
    join competitor_analysis on sales_info.product_id=competitor_analysis.product_id
 
)
    ,t5 as (
        select  distinct t1 .product_id,t1.product_name,t1.competitor_name,t11+t21+t31+t41 as total_sales_amount_of_product,t2.total_competitor_sales_amount_2023
from
 
t1 join t2 on t1.product_id=t2.product_id
    join  t3 on t1.product_id=t3.product_id
join t4 on t4.product_id=t1.product_id
)
 
select product_id,product_name,competitor_name,total_sales_amount_of_product,(total_sales_amount_of_product-t5.total_competitor_sales_amount_2023) as sales_difference_with_competitor
from t5
相关推荐
qq_334563559 分钟前
PHP源码是否依赖特定芯片组_Intel与AMD平台差异【操作】
jvm·数据库·python
Cx330❀16 分钟前
Linux命名管道(FIFO)通信:从原理到实操,一文搞懂跨进程通信
大数据·linux·运维·服务器·elasticsearch·搜索引擎
汽车仪器仪表相关领域21 分钟前
NHVOC-70系列固定污染源挥发性有机物监测系统:精准破局工业VOCs监测痛点,赋能环保合规升级
大数据·人工智能·安全性测试
qq_2069013944 分钟前
如何使用C#调用Oracle存储过程_OracleCommand配置CommandType.StoredProcedure
jvm·数据库·python
m0_748839491 小时前
CSS如何实现元素平滑滚动_使用scroll-behavior属性设置
jvm·数据库·python
Victoria.a1 小时前
python基础语法
开发语言·python
星晨雪海2 小时前
Lombok 注解使用场景终极总结
java·数据库·mysql
xiaoyaohou112 小时前
023、数据增强改进(二):自适应数据增强与AutoAugment策略
开发语言·python
鬼圣2 小时前
Python 上下文管理器
开发语言·python
实证小助手2 小时前
世界各国经济政策不确定指数(1997-2024年)月度数据
大数据·人工智能