大家好,我是老吳,大家也可以叫我吳同學,再小一點的朋友也可以叫我吳師兄,歡迎大家跟我一起走進資料分析的世界,一起學習!
感興趣的朋友可以關注我的資料分析專欄,里面有許多優質的文章跟大家分享哦,
另外也歡迎大家關注我的SQL刷題專欄,里面有我分享的高質量SQL題,以及詳細的決議,
目錄
- 問題描述
- 解題思路
- 代碼實作
- 結束語
本篇博文又是我的SQL題分享環節,為了記錄一下自己的做題程序,以及防止后續力扣會員過期無法再次查看題目,所以我每天都會給大家選出一道質量較高的SQL題目發表到博客上,希望在記錄的同時,對大家也能有所幫助,
那么今天給大家分享的題是LeetCode的第1613題——找到遺失的ID,
下面是問題的詳細描述,
問題描述
表 Customer
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| customer_id | int |
| customer_name | varchar |
+---------------+---------+
customer_id 是該表主鍵,
該表第一行包含了顧客的名字和id,
寫一個 SQL 陳述句, 找到所有遺失的顧客id. 遺失的顧客id是指那些不在 Customers 表中, 值卻處于 1 和表中最大 customer_id 之間的id.
注意: 最大的 customer_id 值不會超過 100.
回傳結果按 ids 升序排列
查詢結果格式如下例所示:.
Customers 表:
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1 | Alice |
| 4 | Bob |
| 5 | Charlie |
+-------------+---------------+
Result 表:
+-----+
| ids |
+-----+
| 2 |
| 3 |
+-----+
表中最大的customer_id是5, 所以在范圍[1,5]內, ID2和3從表中遺失.
解題思路
- 先找到最大值,然后生成對應數量的欄位
- 如最大值為5,則生成五行資料,數值從1到5
- 之后判斷哪些值不在customers表中(這里不用not in,用left join,這樣子在hive中也能執行)
- 所以關鍵在于如何創建臨時表
代碼實作
with tmp t as
(select 1 as n
union all
select n+1 from t where n<(select max(customer_id) from customers)
)
select
t.n as ids
from t left join Customers c on t.n=c.customer_id
where c.customer_id is null
結束語
看完這篇,還有更多知識點分享給你哦,自己慢慢找哈,就在下面鏈接,
推薦關注的專欄
👨?👩?👦?👦 機器學習:分享機器學習實戰專案和常用模型講解
👨?👩?👦?👦 資料分析:分享資料分析實戰專案和常用技能整理
往期內容回顧
💚 學習Python全套代碼【超詳細】Python入門、核心語法、資料結構、Python進階【致那個想學好Python的你】
?? 學習pandas全套代碼【超詳細】資料查看、輸入輸出、選取、集成、清洗、轉換、重塑、數學和統計方法、排序
💙 學習pandas全套代碼【超詳細】分箱操作、分組聚合、時間序列、資料可視化
💜 學習NumPy全套代碼【超詳細】基本操作、資料型別、陣列運算、復制和試圖、索引、切片和迭代、形狀操作、通用函式、線性代數
關注我,了解更多相關知識!
CSDN@報告,今天也有好好學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379506.html
標籤:其他
上一篇:RabbitMQ生產方式和考慮訊息可靠性投遞及其他問題
下一篇:基于微信小程式的學習網站原始碼
