1159.(Hard)市场分析 II

表: 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 表的外键
buyer_id 和 seller_id 是 Users 表的外键

表: Items

写一个 SQL 查询确定每一个用户按日期顺序卖出的第二件商品的品牌是否是他们最喜爱的品牌。如果一个用户卖出少于两件商品,查询的结果是 no 。

题目保证没有一个用户在一天中卖出超过一件商品

下面是查询结果格式的例子:

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/market-analysis-ii

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution

之前的solution(好复杂)

  1. 先用sub query找出每个卖家按日排序卖出的第二件商品是什么 (表o)

  2. 和另外两张表join

  3. 表o中卖出的第二件商品 (o.item_2nd) 有非空值即为 yes

踩坑: 部分测试用例中,用户最喜欢的品牌favorite_brand可对应多个item_id,所以最后要对user_id做一次聚合,而不是直接对o.item_2nd 做ifnull判断。

Schema

Last updated

Was this helpful?