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.执行结果


浙公网安备 33010602011771号