OPPO · 排序 · 算法编程题
OPPO 排序 时限 1 秒 / 256 MB

题目描述

【背景】:OPPO 公司为了评估不同产品线在不同销售渠道的销售表现,需要根据以下三个数据表,分析各产品线在特定时间段内的销售情况。
【原始表】:
oppo_products(OPPO 产品)表:
·
product_id (产品 ID): 产品的唯一标识符
·
product_name (产品名称): 产品的名称
·
product_line (产品线): 固定的(手机、平板、耳机)
sales_channels(销售渠道)表:
·
channel_id (渠道 ID): 销售渠道的唯一标识符
·
channel_name (渠道名称): 销售渠道的名称
·
region (地区): 销售渠道所在的地区
sales_data(销售数据)表:
·
sale_id (销售 ID): 销售的唯一标识符
·
product_id (产品 ID): 所属产品的唯一标识符,用于关联 OPPO 产品表中的产品
·
channel_id (渠道 ID): 所属销售渠道的唯一标识符,用于关联销售渠道表中的渠道
·
sale_date (销售日期): 销售发生的日期
·
sale_amount (销售金额): 本次销售的金额
【要求】:根据上述表格,查询每个产品线在不同地区、不同销售渠道的总销售金额以及销售数量。查询结果按照产品线升序排列,如果产品线一致按照channel_id 升序排列,按照。要求查询出来的表格的字段如下:
·
product_line: 产品线。
·
region: 地区。
·
channel_name: 销售渠道名称。
·
total_sale_amount: 总销售金额。
·
total_sale_quantity: 销售数量。
【示例】:
oppo_products(OPPO 产品)表:
图片
sales_channels(销售渠道)表:
图片
sales_data(销售数据)表:
图片
【按照要求查询出来的数据】
图片
【解释】
对于平板这个产品线来说,sales_data表中有2笔订单,分别是国内官方商城和国外实体店渠道,每个渠道销售数量是1,分别销售金额是4000和3000。对于手机这个产品线来说,在sales_channels表中有2笔订单但是销售渠道都是国内官方商城,总销售数量是2,销售总金额是5000+6000 = 11000

样例共 1 组

样例 1
输入
DROP TABLE IF EXISTS oppo_products ;
DROP TABLE IF EXISTS sales_channels;
DROP TABLE IF EXISTS sales_data;
-- 创建表
CREATE TABLE oppo_products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(50),
    product_line VARCHAR(20)
);

CREATE TABLE sales_channels (
    channel_id INT PRIMARY KEY,
    channel_name VARCHAR(50),
    region VARCHAR(20)
);

CREATE TABLE sales_data (
    sale_id INT PRIMARY KEY,
    product_id INT,
    channel_id INT,
    sale_date DATE,
    sale_amount DECIMAL(10, 2)
   
);
-- 插入数据
INSERT INTO oppo_products (product_id, product_name, product_line)
VALUES (1, 'Find X5', '手机'),
       (2, 'Pad Air', '平板'),
       (3, 'Find N2', '手机'),
       (4, 'Pad 5', '平板');

INSERT INTO sales_channels (channel_id, channel_name, region)
VALUES (1, '官方商城', '国内'),
       (2, '实体店', '国外');

INSERT INTO sales_data (sale_id, product_id, channel_id, sale_date, sale_amount)
VALUES (1, 1, 1, '2024-01-01', 5000),
       (2, 2, 2, '2024-01-02', 3000),
       (3, 3, 1, '2024-01-03', 6000),
       (4, 4, 1, '2024-01-04', 4000);
输出
product_line|region|channel_name|total_sale_amount|total_sale_quantity
平板|国内|官方商城|4000.00|1
平板|国外|实体店|3000.00|1
手机|国内|官方商城|11000.00|2

算法解析依据一般

考点:排序

限制 1 秒 / 256MB | 核心代码模式(实现给定函数)

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:排序

先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。

思路框架(排序 通法 · 非本题专属)

  1. 排序后很多性质变简单:相邻关系、前缀性质、二分可行。
  2. 若题目禁止使用排序库函数,则手写快排/归并(归并还能顺带求逆序对)。
  3. 排序常与其他范式组合,比如「排序 + 贪心」「排序 + 二分」「排序 + 双指针」。

实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。

复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)

该范式的通法易错点

  • 自定义比较函数不满足严格弱序会导致运行时崩溃。
  • 排序后丢失原始下标,题目需要下标时记得用 pair 一起排。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:DROP TABLE IF EXISTS oppo_products ; / DROP TABLE IF EXISTS sales_channels; / DROP TABLE IF EXISTS sales_data; / -- 创建表 / CREATE TABLE oppo_
  • 输出:product_line|region|channel_name|total_sale_amount|total_sale_quantity / 平板|国内|官方商城|4000.00|1 / 平板|国

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-OPPO-数据分析岗笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解