• 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

  • 相关阅读:
    全志R128适配 ST7789v LCD
    今日头条 小程序
    超聚变安装银河麒麟服务器系统ky10-server-x86
    MATLB|电动车智能充电模式及电力高峰需求预测
    基于Html5的个性化学习系统的设计与实现
    halcon实时采集数据
    Vue组件详解
    Spring Boot Hello World 基于 IDEA 案例详解
    iptables安全技术和防火墙
    linux使用ros打开奥比中光astra相机,查看红外图像
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125421024