【数据分析面试】31. 产品销售额排名(SQL窗口函数)

在这里插入图片描述

题目:

假设你有一个名为 sales 的表,其中包含了销售记录,字段包括 product_id(产品ID)、sales_date(销售日期)和 amount(销售额)。

请编写一条SQL查询,求每个销售日期内的产品销售额的排名,结果按照销售日期顺序排列。

示例

输入:
sales

product_idsales_dateamountregion
12024-04-01100East
22024-04-01200West
12024-04-02150North
22024-04-02180South
32024-04-01300East
32024-04-02250West

输出:

product_idsales_dateamountsales_rank
32024/4/13001
22024/4/12002
12024/4/11003
32024/4/22501
22024/4/21802
12024/4/21503

答案

SELECT 
    product_id,
    sales_date,
    amount,
    RANK() OVER (PARTITION BY sales_date ORDER BY amount DESC) AS sales_rank
FROM 
    sales
ORDER BY sales_date
  • RANK() 是一个窗口函数,它根据指定的排序条件为分组后的计算结果排名。
  • PARTITION BY sales_date 指定了窗口函数的分区方式,即按照销售日期分组。
  • ORDER BY amount DESC 指定了排序方式,按销售额降序排列。
  • ORDER BY sales_date 最后补上题目要求,按照日期排序

补充:表格生成代码:

-- 创建 sales 表
CREATE TABLE sales (
    product_id INT,
    sales_date DATE,
    amount DECIMAL(10, 2),
    region VARCHAR(50)
);

-- 插入数据
INSERT INTO sales (product_id, sales_date, amount, region) VALUES
    (1, '2024-04-01', 100.00, 'East'),
    (2, '2024-04-01', 200.00, 'West'),
    (1, '2024-04-02', 150.00, 'North'),
    (2, '2024-04-02', 180.00, 'South'),
    (3, '2024-04-01', 300.00, 'East'),
    (3, '2024-04-02', 250.00, 'West');

更多练习

  1. 在原数据表格中增加一列——每个销售日期的销售额总和total_sales_amount。(提示:SUM())
  2. 增加一列每个地区的平均日销售额avg_sales_amount,并显示结果。(提示:使用AVG())
  3. 为每个销售记录分配一个唯一的序号sales_record_id,并按照销售日期降序排列。(提示:使用ROW_NUMBER())
  4. 为每个销售地区的销售额进行排名。该使用RANK() 还是 DENSE_RANK()?二者有什么不同?

更多详细答案可关注公众号查阅。
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值