高頻SQL 50 題(持續更新)

SQL的編寫與運用

0. 寫在前面

最近學習了數據庫系統概論,其中涉及到了關于SQL語句的編寫,感覺理論知識不足以讓我掌握相關的編寫方式,因此選擇刷力扣上的題目進行復習鞏固。

時間不是很多,可能不會經常更新,有時間寫幾道題目便會在后面進行題解補充和感想撰寫。

1. MySQL 編寫

1757. 可回收且低脂的產品 - 力扣(LeetCode)

沒有啥難度,直接使用SQL語句進行搜索即可

關鍵字 SELECT 用于指定我們想要從表 Products 中檢索的列。在這種情況下,我們想要檢索 product_id 列。關鍵字 WHERE 用于根據特定條件過濾表 Products 中的行,條件是 low_fats 列的值為"Y"(表示低脂肪產品)且 recyclable 列的值為"Y"(表示可回收產品)。我們使用邏輯運算符 AND 將兩個條件組合起來,確保最終結果只包含既是低脂肪產品又是可回收產品的產品ID。

selectproduct_id
fromProducts
where low_fats="Y" and recyclable="Y"

584. 尋找用戶推薦人 - 力扣(LeetCode)

這道題目的主要難點就是需要知道如何查詢到字段值為NULL的人,也就是查詢到沒有推薦人的人。

初步想法是這樣的

SELECT name FROM customer WHERE referee_Id <> 2;
# SELECT name FROM customer WHERE referee_Id != 2;  -- 和 # 都是表示單行注釋的意思

但是實際上上面的語句是查詢不到NULL字段值的,因為

  • NULL是一個特殊值,代表缺失的數據,不應該用NULL == NULL這樣的邏輯來判斷。
  • NULL值不能參與普通的比較運算,如<, >, =, <=, >=
  • 使用IS NULLIS NOT NULL來查詢NULL值是最推薦的做法。

因此正確的代碼如下:

SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL;

595. 大的國家 - 力扣(LeetCode)

-- 使用行過濾來識別滿足條件的國家
SELECT * 
FROM world 
WHERE area >= 3000000 OR population >= 25000000
-- 然后按照問題的要求返回三列
SELECT name, population, area 
FROM world 
WHERE area >= 3000000 OR population >= 25000000

還可以使用union進行實現

# Write your MySQL query statement beloow
select name, population, area from world where population >= 25000000
union
select name, population, area from world where area >= 3000000;

關于or和union的區別,大致如下:

對于單列來說,使用or是沒有問題的,但是or涉及到多個列的時候,每次select只能選取一個ndex,如果選擇了area,population就需要進行table-scan,即全部掃描一遍,但是使用union就可以解決這個問題,分別使用area和population上面的index進行查詢。 但是這里還會有一個問題就是,UNION會對結果進行排序去重,可能會降低一些performance

u n i o n 用于連接兩個 s q l ,所以可以查詢返回列相同的 s e l e c t 語句,所以表可以不是同一張,而 o r 的對象只能是同一張表; u n i o n 可以實現將判斷不同字段的兩個 s q l 聯合查詢, o r 固然也可以實現,但是很容易讓人繞進去,沒有 u n i o n 那么通俗易懂。 union 用于連接兩個sql,所以可以查詢返回列相同的 select 語句,所以表可以不是同一張,而 or 的對象只能是同一張表;\\ union 可以實現將判斷不同字段的兩個sql 聯合查詢,or 固然也可以實現,但是很容易讓人繞進去,沒有 union 那么通俗易懂。 union用于連接兩個sql,所以可以查詢返回列相同的select語句,所以表可以不是同一張,而or的對象只能是同一張表;union可以實現將判斷不同字段的兩個sql聯合查詢,or固然也可以實現,但是很容易讓人繞進去,沒有union那么通俗易懂。

1148. 文章瀏覽 I - 力扣(LeetCode)

這道題目主要的難點就是需要進行重命名,然后需要升序排序。

SELECT DISTINCT author_id AS id # DISTINCT用于消除查詢結果中的重復行,只保留唯一的記錄。
FROM Views 
WHERE author_id = viewer_id 
ORDER BY id # id DESC  表示按照id降序進行排序

1683. 無效的推文 - 力扣(LeetCode)

題目中的主要難點就是需要知道mysql求解字符串長度的函數

對于SQL表,用于計算字符串中字符數的最佳函數是 CHAR_LENGTH(str),它返回字符串 str 的長度。另一個常用的函數 LENGTH(str) 在這個問題中也適用,因為列 content 只包含英文字符,沒有特殊字符。否則,LENGTH() 可能會返回不同的結果,因為該函數返回字符串 str 的字節數,某些字符包含多于 1 個字節。

以字符 ‘¥’ 為例:CHAR_LENGTH() 返回結果為 1,而 LENGTH() 返回結果為 2,因為該字符串包含 2 個字節。

SELECT tweet_id
FROM tweets
WHERE CHAR_LENGTH(content) > 15# LENGTH(content)>15  也是可以的,但是要是出現了非英文的字符,可能就會出錯了

1378. 使用唯一標識碼替換員工ID - 力扣(LeetCode)

SELECT  # 指定要返回的列EmployeeUNI.unique_id, Employees.name
FROM Employees
LEFT JOIN  # 將表進行連接,LEFT JOIN 的特點是,即使 EmployeeUNI表中沒有匹配的記錄,Employees 表中的所有記錄都會出現在結果集中。EmployeeUNI
ON # 指定連接條件Employees.id = EmployeeUNI.id;

1068. 產品銷售分析 I - 力扣(LeetCode)

SELECT p.product_name , s.year , s.price
# 指定了查詢返回的結果集應包含哪些列
FROM Sales s # 定義了一個主表,并指定了一個別名
LEFT JOIN Product p
# 將Sales表與另一個名為Product的表進行連接,并給Product表指定了一個別名p。
# LEFT JOIN意味著即使Product表中沒有匹配項,也會返回Sales表中的所有記錄。如果沒有匹配項,則結果中的Product字段將為NULL。
ON s.product_id = p.product_id
# 定義了兩個表之間的連接條件

1581. 進店卻未進行過交易的顧客 - 力扣(LeetCode)

這題主要就是需要看懂題目表達的意思:題目翻譯過來就是左連接,然后找出來null的就可以了。

因為左連接是以左表為主導,確保左表的所有記錄都會出現在結果集中,而右表中的記錄只有在與左表有匹配時才會出現。

select customer_id ,count(customer_id) count_no_trans
from Visits v
left join Transactions t
on v.visit_id=t.visit_id
where transaction_id is null
group by customer_id;

然后還可以使用不相關子查詢進行求解:只要是visit_id不在Transactions表中但是在visits表中的話,則這樣的數據是滿足條件的,基于此,查詢代碼如下:但是下面每次檢查not in耗時長

SELECT customer_id,count(visit_id) as count_no_trans
FROM Visits
WHERE visit_id not in (SELECT DISTINCT visit_id FROM Transactions)
# 使用 DISTINCT 可以避免重復排除同一個 visit_id,確保每個 visit_id 只被考慮一次。
GROUP BY customer_id
# 將數據分組,以便對每組數據執行聚合函數

197. 上升的溫度 - 力扣(LeetCode)

這題一開始的想法就是將表和自己進行笛卡爾積,但是后面發現不太對,因為只需要找出比其前一天溫度高的天氣即可,看解析后發現有個函數datediff可以進行使用

# Write your MySQL query statement below
select w2.id
from Weather w1,Weather w2
Where datediff(w2.recordDate,w1.recordDate)=1 and w2.temperature>w1.temperature

1661. 每臺機器的進程平均運行時間 - 力扣(LeetCode)

這道題目主要是需要知道round的使用方式
round的使用方式

select a.machine_id ,
round(avg(a.timestamp-b.timestamp),3) as processing_time  
from Activity a
join Activity b
on  # 下面的是連接條件:a、b表的機器、進程id都對應相等,且a表類型是end,b表類型是start 將這樣的行按機器id分組
a.machine_id=b.machine_id and
a.process_id=b.process_id and
a.activity_type='end' and
b.activity_type='start'
group by a.machine_id

577. 員工獎金 - 力扣(LeetCode)

還是做題目了有效果的,我一看題目要求和樣例,我就知道需要考慮以下事情:

1、由于獎金不是所有員工有的,因此Bonus表和Employee表進行連接的話,需要對Bonus進行左連接。

2、要是想要取出null值的話,需要使用is null 而不是直接簡單的使用=號進行判斷

select name,bonus
from Employee
left join bonus
on Employee.empId=bonus.empId
where bonus<1000 or bonus is null

1280. 學生們參加各科測試的次數 - 力扣(LeetCode)

首先需要統計每個學生參加每個科目的考試次數,因此需要使用group by,考慮到還需要返回其他的屬性,因此這里需要使用到子查詢。同時考慮到學生和科目都是有可能進行連接的,因此這里選擇使用笛卡爾積將學生表和科目表進行連接,也就是使用cross join進行連接。然后再將子查詢得到的表進行左連接,考慮到會有null的情況,使用ifnull進行填充即可。最后對相應位置進行排序即可。

SELECT s.student_id, s.student_name, sub.subject_name, IFNULL(grouped.attended_exams, 0) AS attended_exams
FROM Students s
CROSS JOIN Subjects sub
LEFT JOIN (SELECT student_id, subject_name, COUNT(*) AS attended_exams  # 前面兩個屬性是用來進行連接的,后面的才是需要查詢的屬性FROM ExaminationsGROUP BY student_id, subject_name
) grouped 
ON s.student_id = grouped.student_id AND sub.subject_name = grouped.subject_name
ORDER BY s.student_id, sub.subject_name;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73817.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】12、函數-02

文章目錄 1. 返回值2.文檔字符串3. 作用域4. 命名空間 1. 返回值 返回值就是函數執行以后返回的結果&#xff0c;可以通過return來指定函數的返回值。返回值可以通過變量接收返回值 return 后可以返回任意的對象&#xff0c;甚至是一個函數如果僅寫一個return或者不寫return&…

Unity插件-適用于畫面傳輸的FMETP STREAM使用方法(三)基礎使用

目錄 一、插件介紹 二、組件介紹 三、Game View Streaming 1、使用 FM Network UDP 的基本設置 Server Scene Client Scene 2、使用使用 FM WebSocket 的基本設置 四、Audio Streaming 五、Microphone Streaming 一、插件介紹 ??????Unity插件-適用于畫面傳輸的…

如何為預訓練模型進行領域適配:全參數微調、LoRA 還是 Prompt Tuning?

目錄 如何為預訓練模型進行領域適配&#xff1a;全參數微調、LoRA 還是 Prompt Tuning&#xff1f; 1. 全參數微調&#xff08;Full Fine-tuning&#xff09; 適用場景 優缺點 示例代碼&#xff08;使用 Hugging Face Transformers 進行全參數微調&#xff09; 2. LoRA&am…

C++ —— 線程同步(互斥鎖)

C —— 線程同步&#xff08;互斥鎖&#xff09; 線程同步互斥鎖&#xff08;互斥量&#xff09;測試代碼mutex互斥鎖 線程同步 線程同步&#xff1a;多線程協同工作&#xff0c;協商如何使用共享資源。 C11線程同步包含三部分內容&#xff1a; 互斥鎖&#xff08;互斥量&…

UI設計中的加載動畫:優化用戶體驗的細節

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字產品泛濫的今天&#xff0c;用戶對體驗的要求早已超越功能本身。一個看似簡單的加載動畫&…

SpringBoot3+Vue3實戰(Vue3快速開發登錄注冊頁面并對接后端接口)(4)

目錄 一、SpringBoot3Vue3實現基本增刪改查。前后端通信交互、配置后端跨域請求。數據批量刪除。(博客鏈接) 二、SpringBoot3Vue3快速開發登錄、注冊頁面并實現對接。 &#xff08;1&#xff09;操作數據表employee(員工信息表)。 <1>修改employee表的字段組成。 <2&g…

Python標準庫中bisect模塊的bisect_right()函數在網格交易中的應用

本文將深入探討Python標準庫中bisect模塊的bisect_right()函數在網格交易中的具體應用。 bisect模塊 bisect模塊是Python標準庫中的一個模塊&#xff0c;提供了對有序列表的插入和搜索操作的支持。它基于二分查找算法&#xff0c;可以高效地在有序列表中查找或插入元素&#x…

Excel(函數篇):IF函數、FREQUNCY函數、截取函數、文本處理函數、日期函數、常用函數詳解

目錄 IF函數等于判斷區間判斷與AND函數、OR函數一同使用IFNA函數和IFERROR函數 FREQUNCY函數、分斷統計LEFT、RIGHT、MID截取函數FIND函數、LEN函數SUBSTITUTE函數ASC函數、WIDECHAR函數實戰&#xff1a;如何獲取到表中所有工作簿名稱文本處理函數TEXT函數TEXTJOIN函數 日期函數…

生成PDF文件:從html2canvas和jsPdf渲染到Puppeteer矢量圖

剛剛實現而已&#xff1a;第一次明白&#xff0c;雙擊或file:///打開html文件&#xff0c;居然和從localhost:3000打開同一個html文件有本質的區別。 字體居然還能以Base64代碼嵌入到網頁&#xff0c;只是太大太笨。 需要安裝node.js&#xff0c;npm安裝更多依賴&#xff1a;…

Git 分支刪除操作指南(含本地與遠程)

&#x1f680; Git 分支刪除操作指南&#xff08;含本地與遠程&#xff09; 在多人協作的開發過程中&#xff0c;定期清理已合并的臨時分支&#xff08;如 feature/*、bugfix/*、hotfix/* 等&#xff09;可以保持倉庫整潔&#xff0c;避免混亂。 &#x1f4cc; 分支命名規范回…

Qt中打開windows的cmd窗口并顯示

在windows上&#xff0c;用Qt的GUI程序打開另一個程序&#xff0c;使用QProcess即可&#xff0c;并且被打開的程序通常也會顯示出來&#xff0c;但是如果想要打開dos窗口并顯示&#xff0c;并執行其中的命令或者批處理&#xff0c;則需要使用QProcess提供的windows特有的函數QP…

Modbus TCP到RTU:輕松轉換指南!

Modbus TCP 到 RTU&#xff1a;輕松轉換指南&#xff01; 在現代工業自動化領域&#xff0c;Modbus TCP和Modbus RTU兩種通信協議因其高效、穩定的特點被廣泛應用。然而&#xff0c;隨著技術的發展和設備升級的需求&#xff0c;經常會遇到需要將這兩種協議進行互相轉換的場景。…

微信小程序訂閱消息發送消息,點擊消息進入小程序頁面

1、在小程序官網訂閱消息選用或創建消息模板獲取模板ID可多個 如圖&#xff1a; 2、微信小程序前端頁面發送請求訂閱權限 請求模板id的權限可以是一個可以是多個&#xff0c;用戶同意訂閱&#xff0c;獲取code傳遞給后端——后端拿到code生成唯一的openid用于發送訂閱消息 注…

卷積神經網絡 - 卷積層

卷積神經網絡一般由卷積層、匯聚層和全連接層構成&#xff0c;本文我們來學習卷積層。 卷積層&#xff08;Convolutional Layer&#xff09;是卷積神經網絡&#xff08;CNN&#xff09;的核心組件&#xff0c;專門用于處理具有網格結構的數據&#xff08;如圖像、音頻、時間序…

Vue3全局化配置(ConfigProvider)

效果如下圖&#xff1a; 在線預覽 APIs ConfigProvider 參數說明類型默認值theme主題對象Theme{}abstractboolean是否不存在 DOM 包裹元素truetagstringConfigProvider 被渲染成的元素&#xff0c;abstract 為 true 時有效‘div’ Theme Type 名稱說明類型默認值common?全…

LabVIEW煙氣速度場實時監測

本項目針對燃煤電站煙氣流速實時監測需求&#xff0c;探討了靜電傳感器結構與速度場超分辨率重建方法&#xff0c;結合LabVIEW多板卡同步采集與實時處理技術&#xff0c;開發出一個高效的煙氣速度場實時監測系統。該系統能夠在高溫、高塵的復雜工況下穩定運行&#xff0c;提供高…

若依excel工具類導出excel模板數據帶下拉映射

導出模板代碼&#xff0c;原理是combo屬性 傳遞一個數組 里面是label下拉數組。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…

3.8 Spring Boot監控:Actuator+Prometheus+Grafana可視化

在Spring Boot應用中&#xff0c;通過整合Actuator、Prometheus和Grafana可以構建完整的監控體系&#xff0c;實現指標采集、存儲和可視化。以下是具體實現步驟&#xff1a; 一、Spring Boot Actuator 配置 作用&#xff1a;暴露應用健康指標、性能數據等監控端點。 1. 添加依…

啟幕數據結構算法雅航新章,穿梭C++夢幻領域的探索之旅——二叉樹序列構造探秘——堆的奧義與實現詩篇

人無完人&#xff0c;持之以恒&#xff0c;方能見真我&#xff01;&#xff01;&#xff01; 共同進步&#xff01;&#xff01; 文章目錄 一、堆的定義與結構二、堆的實現1.堆的初始化和銷毀堆的初始化堆的銷毀 2.向上調整算法和入堆向上調整算法入堆 3.向下調整算法和出堆頂數…

“Failed to Load SteamUI.dll” 錯誤詳解:全面解析與高效解決方案,助你快速修復 Steam 客戶端問題

在使用 Steam 客戶端時&#xff0c;你是否遇到過 failed to load steamui.dll 錯誤&#xff1f;這個令人頭疼的問題可能導致 Steam 無法正常啟動&#xff0c;影響游戲體驗。Failed to load steamui.dll 錯誤通常與文件損壞、系統配置或軟件沖突有關&#xff0c;但無需擔心&…