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

描述

【背景】: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
相关推荐
2401_864959282 小时前
C++与Python混合编程实战
开发语言·c++·算法
左左右右左右摇晃2 小时前
Java并发——锁的状态演变
java·开发语言·笔记
2501_945424802 小时前
C++与硬件交互编程
开发语言·c++·算法
2301_818419012 小时前
C++中的表达式模板
开发语言·c++·算法
Roselind_Yi2 小时前
排查Visual C++堆损坏(HEAP CORRUPTION)错误:从报错到解决的完整复盘
java·开发语言·c++·spring·bug·学习方法·远程工作
wanhengidc2 小时前
服务器托管对企业的作用
大数据·运维·服务器·分布式·智能手机
Code知行合壹2 小时前
Spark使用总结
大数据·分布式·spark
ZoeJoy82 小时前
C# Windows Forms 学生成绩管理器(StudentGradeManager)—— 方法重载、out、ref、params 参数示例
开发语言·c#
千百元2 小时前
网络图标显示不正常
开发语言·网络·php