• 1159. 市场分析 II


    1159. 市场分析 II

    难度困难23收藏分享切换为英文接收动态反馈

    SQL架构

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

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | item_id       | int     |
    | item_brand    | varchar |
    +---------------+---------+
    item_id 是该表的主键
    

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

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

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

    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         |
    +---------+------------+
    
    Result table:
    +-----------+--------------------+
    | seller_id | 2nd_item_fav_brand |
    +-----------+--------------------+
    | 1         | no                 |
    | 2         | yes                |
    | 3         | yes                |
    | 4         | no                 |
    +-----------+--------------------+
    
    id 为 1 的用户的查询结果是 no,因为他什么也没有卖出
    id为 2 和 3 的用户的查询结果是 yes,因为他们卖出的第二件商品的品牌是他们自己最喜爱的品牌
    id为 4 的用户的查询结果是 no,因为他卖出的第二件商品的品牌不是他最喜爱的品牌
    1. select
    2. ss1.user_id seller_id,if(ss1.favorite_brand = it.item_brand,'yes' , 'no') 2nd_item_fav_brand #if判断 相等 为 yes 否者 为 no
    3. from
    4. (select
    5. u.user_id,u.favorite_brand,s1.item_id
    6. from
    7. Users u left join
    8. (
    9. select
    10. seller_id,item_id,row_Number() over(partition by seller_id order by order_date) rw # 对每一个用户按日期顺序卖出的商品进行编号
    11. from
    12. Orders
    13. ) s1
    14. on s1.rw = 2 and u.user_id = s1.seller_id #编号 为 2 的产品是用户按日期顺序卖出的第二件商品
    15. ) ss1 left join Items it # 再次 左连接 保证 users 表的完整 随后 便于找到 2号产品 是哪个牌子
    16. on
    17. ss1.item_id = it.item_id
    1. # Write your MySQL query statement below
    2. select
    3. ss1.user_id seller_id,if(ss1.favorite_brand = it.item_brand,'yes' , 'no') 2nd_item_fav_brand #if判断 相等 为 yes 否者 为 no
    4. from
    5. (select
    6. u.user_id,u.favorite_brand,s1.item_id
    7. from
    8. Users u left join
    9. (
    10. select
    11. seller_id,item_id,row_Number() over(partition by seller_id order by order_date) rw # 对每一个用户按日期顺序卖出的商品进行编号
    12. from
    13. Orders
    14. ) s1
    15. on s1.rw = 2 and u.user_id = s1.seller_id #编号 为 2 的产品是用户按日期顺序卖出的第二件商品
    16. ) ss1 left join Items it # 再次 左连接 保证 users 表的完整 随后 便于找到 2号产品 是哪个牌子
    17. on
    18. ss1.item_id = it.item_id

  • 相关阅读:
    Visual Studio Code 中安装 DevChat 的体验与评测
    最新版SpringBoot整合Mybatis,实现增删改查(CRUD)
    springboot毕设项目超市仓库管理系统15g4i(java+VUE+Mybatis+Maven+Mysql)
    进程间通信(IPC)-管道、消息队列、信号量、共享存储、socket
    C++中map和set的区别
    CF - D. Ehab and the Expected XOR Problem(前缀异或)
    一个开源且完全自主开发的国产网络协议栈
    计算机视觉与深度学习 | 视觉惯性SLAM的基础理论
    Apple Watch无法开机怎么办?苹果手表不能开机解决方法!
    计算机的核心:ALU(算术和逻辑单元)
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125421024