日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

LeetCode MySQL 1159. 市场分析 II(rank+over)

發布時間:2024/7/5 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode MySQL 1159. 市场分析 II(rank+over) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

表: 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為 23 的用戶的查詢結果是 yes,因為他們賣出的第二件商品的品牌是他們自己最喜愛的品牌 id為 4 的用戶的查詢結果是 no,因為他賣出的第二件商品的品牌不是他最喜愛的品牌

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/market-analysis-ii
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 連接各表,窗口函數求出排名
select o.order_date, o.seller_id, i.item_brand, u.favorite_brand,rank() over(partition by o.seller_id order by o.order_date) rnk from Orders o left join Users u on o.seller_id = u.user_id left join Items i on o.item_id = i.item_id {"headers": ["order_date", "seller_id", "item_brand", "favorite_brand", "rnk"], "values": [["2019-08-01", 2, "HP", "Samsung", 1], ["2019-08-04", 2, "Samsung", "Samsung", 2], ["2019-08-02", 3, "Lenovo", "LG", 1], ["2019-08-03", 3, "LG", "LG", 2], ["2019-08-04", 4, "Samsung", "HP", 1], ["2019-08-05", 4, "Lenovo", "HP", 2]]}
  • 選出 rnk = 2 的,再左連接 所有用戶的 id
# Write your MySQL query statement below select u.seller_id, if(item_brand is null, 'no', case when favorite_brand = item_brand then 'yes'else 'no' end) as 2nd_item_fav_brand from (select user_id as seller_idfrom Users ) u left join (select *from(select o.order_date, o.seller_id, i.item_brand, u.favorite_brand,rank() over(partition by o.seller_id order by o.order_date) rnkfrom Orders o left join Users uon o.seller_id = u.user_idleft join Items ion o.item_id = i.item_id) t1where rnk = 2 ) t2 on u.seller_id = t2.seller_id

我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode MySQL 1159. 市场分析 II(rank+over)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。