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

描述

【背景】: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
相关推荐
Access开发易登软件3 分钟前
Access 用 VBA 操作 SQLite,不用装任何驱动
jvm·数据库·sqlite·vba·access·access开发
断点之下6 分钟前
从C的struct到C++的class:封装、this指针、三大特性入门
开发语言·c++
yongui478346 分钟前
基于稀疏低秩分解的图像去噪MATLAB实现
开发语言·matlab
名不经传的养虾人8 分钟前
从0到1:企业级AI项目迭代日记 Vol.38|能演示的系统,和能日常用的系统,差的是这五件事
大数据·人工智能·ai编程·企业ai·多agent协作
geovindu9 分钟前
python: N-Barrier Pattern
开发语言·python·设计模式·屏障模式
小小王app小程序开发11 分钟前
陪诊小程序开发功能深度分析:功能架构、业务逻辑与落地要点
大数据·架构
Yang961113 分钟前
鼎讯信通 RM-1000:助力风电信号覆盖与设备稳定运行
大数据·网络
字节跳动数据库15 分钟前
火山引擎 Milvus 发布官方 CLI + Skill ,终端与对话双通道掌控向量数据库
数据库·人工智能
夜白宋16 分钟前
【Redis深入】一、快的原因
数据库·redis·缓存
战族狼魂18 分钟前
MetaPrompt编译器核心逻辑拆解
开发语言·人工智能·python