• 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

  • 相关阅读:
    SOLIDWORKS PDM—2024版本新增
    PAT 甲级 A1107 Social Clusters
    Go-知识map
    C语言大佬的必杀技---宏的高级用法
    你不知道的自然语言处理应用场景和挑战
    Selenium定位之find_element方法
    STC15单片机-低功耗设计
    迭代器并不全是指针,list的迭代器与vector和string的有什么不一样,让博主告诉你其底层原理!
    将huggingface的大模型转换为safetensor格式
    专用神经网络处理器芯片,神经网络芯片的单片机
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125421024