Leetcode 1159. 市场分析 II

1.题目基本信息

1.1.题目描述

表: Users

+----------------+---------+

| Column Name | Type |

+----------------+---------+

| user_id | int |

| join_date | date |

| favorite_brand | varchar |

+----------------+---------+

user_id 是该表的主键(具有唯一值的列)。

表中包含一位在线购物网站用户的个人信息,用户可以在该网站出售和购买商品。

表: Orders

+---------------+---------+

| Column Name | Type |

+---------------+---------+

| order_id | int |

| order_date | date |

| item_id | int |

| buyer_id | int |

| seller_id | int |

+---------------+---------+

order_id 是该表的主键(具有唯一值的列)。

item_id 是 Items 表的外键(reference 列)。

buyer_id 和 seller_id 是 Users 表的外键。

表: Items

+---------------+---------+

| Column Name | Type |

+---------------+---------+

| item_id | int |

| item_brand | varchar |

+---------------+---------+

item_id 是该表的主键(具有唯一值的列)。

编写一个解决方案,为每个用户找出他们出售的第二件商品(按日期)的品牌是否是他们最喜欢的品牌。如果用户售出的商品少于两件,则该用户的结果为否。保证卖家不会在一天内卖出一件以上的商品。

1.2.题目地址

https://leetcode.cn/problems/market-analysis-ii/description/

2.解题方法

2.1.解题思路

窗口函数

2.2.解题步骤

第一步,找出所有第二件出售的商品为其最喜欢的品牌的用户seller_id

第二步,if判断,构建结果表

3.解题代码

sql代码

# Write your MySQL query statement below

SELECT 
    user_id AS seller_id, 
    IF(seller_id IS NULL, "no", "yes") AS 2nd_item_fav_brand 
FROM 
    Users LEFT JOIN (
        # 第一步,找出所有第二件出售的商品为其最喜欢的品牌的用户seller_id
        SELECT seller_id
        FROM (
            SELECT 
                seller_id, 
                order_date, 
                item_id, 
                DENSE_RANK() OVER (PARTITION BY seller_id ORDER BY order_date) AS rk1 
            FROM Orders
        ) AS t1 
            LEFT JOIN Users ON t1.seller_id = Users.user_id
            LEFT JOIN Items Using (item_id)
        WHERE rk1 = 2 AND Users.favorite_brand = Items.item_brand
    ) AS t2 ON Users.user_id = t2.seller_id

4.执行结果

posted @ 2025-06-08 08:40  Geek0070  阅读(13)  评论(0)    收藏  举报