列表

详情


2474. 购买量严格增加的客户

表: Orders

+--------------+------+
| Column Name  | Type |
+--------------+------+
| order_id     | int  |
| customer_id  | int  |
| order_date   | date |
| price        | int  |
+--------------+------+
order_id 是该表的主键。
每行包含订单的 id、订购该订单的客户 id、订单日期和价格。

 

编写一个 SQL 查询,报告 总购买量 每年严格增加的客户 id。

以 任意顺序 返回结果表。

查询结果格式如下所示。

 

示例 1:

输入: 
Orders 表:
+----------+-------------+------------+-------+
| order_id | customer_id | order_date | price |
+----------+-------------+------------+-------+
| 1        | 1           | 2019-07-01 | 1100  |
| 2        | 1           | 2019-11-01 | 1200  |
| 3        | 1           | 2020-05-26 | 3000  |
| 4        | 1           | 2021-08-31 | 3100  |
| 5        | 1           | 2022-12-07 | 4700  |
| 6        | 2           | 2015-01-01 | 700   |
| 7        | 2           | 2017-11-07 | 1000  |
| 8        | 3           | 2017-01-01 | 900   |
| 9        | 3           | 2018-11-07 | 900   |
+----------+-------------+------------+-------+
输出: 
+-------------+
| customer_id |
+-------------+
| 1           |
+-------------+
解释: 
客户 1: 第一年是 2019 年,最后一年是 2022 年
  - 2019: 1100 + 1200 = 2300
  - 2020: 3000
  - 2021: 3100
  - 2022: 4700
  我们可以看到总购买量每年都在严格增加,所以我们在答案中包含了客户 1。

客户 2: 第一年是2015年,最后一年是2017年
  - 2015: 700
  - 2016: 0
  - 2017: 1000
  我们没有把客户 2 包括在答案中,因为总的购买量并没有严格地增加。请注意,客户 2 在 2016 年没有购买任何物品。

客户 3: 第一年是 2017 年,最后一年是 2018 年
  - 2017: 900
  - 2018: 900

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

mysql 解法, 执行用时: 339 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 23:13:51

select 
    customer_id
from (
    select 
        customer_id
        ,year
        ,year_amt
        ,year - rank() over(partition by customer_id order by year_amt) as diff
    from (
        select 
            customer_id
            ,year(order_date) as year
            ,sum(price) as year_amt
        from Orders
        group by customer_id, year(order_date) 
    ) t1
) t1
group by customer_id
having count(distinct diff) = 1

上一题