返回介绍

solution / 1100-1199 / 1159.Market Analysis II / README

发布于 2024-06-17 01:03:22 字数 3475 浏览 0 评论 0 收藏 0

1159. 市场分析 II

English Version

题目描述

表: 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:

输入:
Users table:
+---------+------------+----------------+
| user_id | join_date  | favorite_brand |
+---------+------------+----------------+
| 1     | 2019-01-01 | Lenovo     |
| 2     | 2019-02-09 | Samsung    |
| 3     | 2019-01-19 | LG       |
| 4     | 2019-05-21 | HP       |
+---------+------------+----------------+
Orders table:
+----------+------------+---------+----------+-----------+
| order_id | order_date | item_id | buyer_id | seller_id |
+----------+------------+---------+----------+-----------+
| 1    | 2019-08-01 | 4     | 1    | 2     |
| 2    | 2019-08-02 | 2     | 1    | 3     |
| 3    | 2019-08-03 | 3     | 2    | 3     |
| 4    | 2019-08-04 | 1     | 4    | 2     |
| 5    | 2019-08-04 | 1     | 3    | 4     |
| 6    | 2019-08-05 | 2     | 2    | 4     |
+----------+------------+---------+----------+-----------+
Items table:
+---------+------------+
| item_id | item_brand |
+---------+------------+
| 1     | Samsung  |
| 2     | Lenovo   |
| 3     | LG     |
| 4     | HP     |
+---------+------------+
输出:
+-----------+--------------------+
| seller_id | 2nd_item_fav_brand |
+-----------+--------------------+
| 1     | no         |
| 2     | yes        |
| 3     | yes        |
| 4     | no         |
+-----------+--------------------+
解释:
id 为 1 的用户的查询结果是 no,因为他什么也没有卖出
id为 2 和 3 的用户的查询结果是 yes,因为他们卖出的第二件商品的品牌是他们最喜爱的品牌
id为 4 的用户的查询结果是 no,因为他卖出的第二件商品的品牌不是他最喜爱的品牌

解法

方法一

# Write your MySQL query statement below
SELECT
  u.user_id AS seller_id,
  CASE
    WHEN u.favorite_brand = i.item_brand THEN 'yes'
    ELSE 'no'
  END AS 2nd_item_fav_brand
FROM
  users AS u
  LEFT JOIN (
    SELECT
      order_date,
      item_id,
      seller_id,
      RANK() OVER (
        PARTITION BY seller_id
        ORDER BY order_date
      ) AS rk
    FROM orders
  ) AS o
    ON u.user_id = o.seller_id AND o.rk = 2
  LEFT JOIN items AS i ON o.item_id = i.item_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文