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

题目描述

【背景】:电商平台需要对商品的销售情况进行深度分析,以优化运营策略。现根据以下三个数据表,查询相关销售数据。
【原始表】:
products(商品)表:
·
product_id (商品 ID): 商品的唯一标识符
·
product_name (商品名称): 商品的名称
·
category (类别): 商品所属的类别,固定的(电子、服装、家居)
sales(销售)表:
·
sale_id (销售 ID): 销售的唯一标识符
·
product_id (商品 ID): 所属商品的唯一标识符,用于关联商品表中的商品
·
sale_date (销售日期): 销售日期
·
quantity (销售数量): 销售的商品数量
·
price (销售单价): 商品的销售单价
customer_info(客户信息)表:
·
sale_id (销售 ID): 销售的唯一标识符
·
customer_id (客户 ID): 客户的唯一标识符
·
age_group (年龄组): 固定的(青年、中年、老年)
·
gender (性别): 固定的(男、女)
【要求】:查询每个商品类别下,不同年龄组和性别的客户购买商品的总销售额,并计算每个商品类别在不同年龄组占该类别总购买量的比例。结果按照商品类别升序排列。要求查询出来的表格的字段如下:
·
product_category: 商品类别。
·
age_group: 年龄组。
·
total_sales_amount: 总销售额。
·
purchase_percentage: 购买量占比。(round保留2位小数)
【示例】
products(商品)表:
图片
sales(销售)表:
图片
customer_info(客户信息)表:
图片
【按要求查询出来的表】
图片
【解释】
上述示例中产品ID1和4号产品都属于电子产品,购买这两个产品的两笔销售记录中分别一个是中年一个青年购买的,中年购买的总金额是105000,青年购买的是60000,中年占比105000/(105000+60000) 约等于 0.64,青年占比60000/(105000+60000) 约等于 0.36

样例共 1 组

样例 1
输入
DROP TABLE IF EXISTS products;
DROP TABLE IF EXISTS sales;
DROP TABLE IF EXISTS customer_info;

-- 创建表
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(50),
    category VARCHAR(20)
);

CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    product_id INT,
    sale_date DATE,
    quantity INT,
    price DECIMAL(10, 2)
);

CREATE TABLE customer_info (
    sale_id INT PRIMARY KEY,
    customer_id INT ,
    age_group VARCHAR(10),
    gender VARCHAR(10)
);

-- 插入数据
INSERT INTO products (product_id, product_name, category)
VALUES (1, 'iPhone 14', '电子'),
       (2, '时尚连衣裙', '服装'),
       (3, '衬衫S10120', '服装'),
       (4, 'ipad10', '电子');

INSERT INTO sales (sale_id, product_id, sale_date, quantity, price)
VALUES (1, 1, '2024-07-01', 10, 6000),
       (2, 2, '2024-07-02', 5, 200),
       (3, 3, '2024-07-03', 10, 100),
       (4, 4, '2024-07-04', 15, 7000);

INSERT INTO customer_info ( sale_id, customer_id,age_group, gender)
VALUES (1, 1, '青年', '男'),
       (2, 2, '中年', '女'),
       (3, 2, '中年', '女'),
       (4, 2, '中年', '女');

select * from products;
select * from sales;
select * from customer_info;
输出
product_category|age_group|total_sales_amount|purchase_percentage
服装|中年|2000.00|1.00
电子|中年|105000.00|0.64
电子|青年|60000.00|0.36

算法解析依据一般

考点:排序

限制 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 products; / DROP TABLE IF EXISTS sales; / DROP TABLE IF EXISTS customer_info; / / -- 创建表 / CREATE TABLE products ( /
  • 输出:product_category|age_group|total_sales_amount|purchase_percentage / 服装|中年|2000.00|1.00 / 电子|中年|10500

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

本题来源:2024年秋招-京东-测试岗-第1批笔试。

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