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

歡迎訪問 生活随笔!

生活随笔

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

数据库

数据科学家常见的5个SQL面试问题

發布時間:2024/8/23 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据科学家常见的5个SQL面试问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?Alexei Ledenev

翻譯 | 天道酬勤,責編 |?Carol

出品 | CSDN云計算(ID:CSDNcloud)

在任何以數據為中心的工作中,對SQL有深刻的理解都是成功的關鍵,盡管這不是工作中最有趣的部分。事實上,除了SELECT FROM WHERE GROUP BY ORDER BY之外,還有更多的SQL方法。你知道的功能越多,操作和查詢所需的內容就越容易。

?

作者希望在本文中學習和交流以下兩件事:

1)學習和教一些基本功能以外的SQL函數

2)探討一些SQL面試練習問題

?

* 本文中的問題僅來自Leetcode

問題1:第二高的薪水

編寫一個SQL查詢用于從Employee表中獲取第二高的薪水。例如,給定下面的Employee表,查詢應返回200作為第二高的薪水。如果沒有第二高的薪水,則查詢應返回null。

?

+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+

1)解決方案A使用IFNULLOFFSET

  • IFNULL(表達,alt):如果為null,則ifnull()返回指定的值,否則返回期望的值。 如果沒有第二高的薪水,我們會使用它返回null。

  • OFFSET:offset與ORDERBY子句一起使用可忽略指定的前n行。這會很有用,因為你希望獲得第二行(第二高的薪水)

?

SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1 ), null) as SecondHighestSalary FROM Employee LIMIT 1

2)解決方案B使用MAX()

此查詢表示選擇的MAX薪水不等于最高薪水,這等于選擇第二高的薪水。

?

SELECT MAX(salary) AS SecondHighestSalary FROM Employee WHERE salary != (SELECT MAX(salary) FROM Employee)

?

問題2:重復的電子郵件

編寫SQL查詢以在名為Person的表中查找所有重復的電子郵件。

?

+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+

1)解決方案A子查詢中的COUNT()

首先,創建一個子查詢來顯示每封電子郵件的頻率次數。然后子查詢在計數大于1的地方被過濾。

?

SELECT Email FROM ( SELECT Email, count(Email) AS count FROM Person GROUP BY Email ) as email_count WHERE count > 1

?

2)解決方案B:HAVING子句

  • HAVING是一個子句,從本質上講,你可以將WHERE語句與聚合(GROUP BY)結合使用。

?

SELECT Email FROM Person GROUP BY Email HAVING count(Email) > 1

?

問題3:溫度上升

下面給定一個天氣表,編寫一個SQL查詢來查找與其之前(昨天)日期相比溫度更高的所有日期的ID。

?

+---------+------------------+------------------+ | Id(INT) | RecordDate(DATE) | Temperature(INT) | +---------+------------------+------------------+ | 1 | 2015-01-01 | 10 | | 2 | 2015-01-02 | 25 | | 3 | 2015-01-03 | 20 | | 4 | 2015-01-04 | 30 | +---------+------------------+------------------+

解決方案:DATEDIFF()

  • DATEDIFF是計算兩個日期之間的差,用于確保我們將今天的溫度與昨天的溫度進行比較。

?

簡單來說,查詢是選擇給定日期的溫度高于昨天的溫度的ID。

?

SELECT DISTINCT a.Id FROM Weather a, Weather b WHERE a.Temperature > b.Temperature AND DATEDIFF(a.Recorddate, b.Recorddate) = 1

問題4:部門最高薪資

下面的雇員表中包含所有雇員。每個員工都有一個ID、一個薪水,還有一個部門ID列。

?

+----+-------+--------+--------------+ | Id | Name | Salary | DepartmentId | +----+-------+--------+--------------+ | 1 | Joe | 70000 | 1 | | 2 | Jim | 90000 | 1 | | 3 | Henry | 80000 | 2 | | 4 | Sam | 60000 | 2 | | 5 | Max | 90000 | 1 | +----+-------+--------+--------------+

?

下面的部門表包含公司的所有部門。

?

+----+----------+ | Id | Name | +----+----------+ | 1 | IT | | 2 | Sales | +----+----------+

編寫SQL查詢來查找每個部門中薪水最高的員工。對于上述兩個表,你的SQL查詢應返回以下行(行的順序無關緊要)。

?

+------------+----------+--------+ | Department | Employee | Salary | +------------+----------+--------+ | IT | Max | 90000 | | IT | Jim |90000 | | Sales | Henry | 80000 | +------------+----------+--------+

?

解決方案:IN子句

  • IN子句允許你在WHERE語句中使用多個OR子句。例如,WHERE country ='Canada'或country ='USA'與WHERE country IN('Canada','USA')相同。

?

  • 在這種情況下,我們希望過濾部門表來僅顯示每個部門的最高薪水(即DepartmentId)。然后,我們可以將兩個表連接在一起,其中DepartmentId和Salary在已過濾的Department表中。

?

SELECT Department.name AS 'Department', Employee.name AS 'Employee', Salary FROM Employee INNER JOIN Department ON Employee.DepartmentId = Department.Id WHERE (DepartmentId , Salary) IN ( SELECT DepartmentId, MAX(Salary) FROM Employee GROUP BY DepartmentId )

問題5:互換座位

瑪麗是一所中學的老師,她有一張座位表,上面存儲著學生的姓名和相應的座位ID。列ID是連續的增量,瑪麗想為相鄰的學生互換座位。

?

你可以編寫SQL查詢來輸出瑪麗的結果嗎?

?

+---------+---------+ | id | student | +---------+---------+ | 1 | Abbot | | 2 | Doris | | 3 | Emerson | | 4 | Green | | 5 | Jeames | +---------+---------+

?

對于樣本輸入,輸出為:

?

+---------+---------+ | id | student | +---------+---------+ | 1 | Doris | | 2 | Abbot | | 3 | Green | | 4 | Emerson | | 5 | Jeames | +---------+---------+

?

注意:如果學生人數為奇數,則無需更改最后一個座位。

?

解決方案:CASE WHEN

  • 可以將CASE WHEN THEN語句視為編碼中的IF語句。

  • 第一條WHEN語句檢查行數是否為奇數,如果行數為奇數,請確保ID號不變。

  • 第二個WHEN語句為每個id加1(例如,1,3,5變為2,4,6)

  • 同樣,第三個WHEN語句將每個id減1(2,4,6變為1,3,5)

?

SELECT CASE WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THENid WHEN id%2 = 1 THEN id + 1 ELSE id - 1 END AS id, student FROM seat ORDER BY id

以上就是所有的解決方法,如果有不清楚的地方或其他意見,歡迎評論告訴我們!

?

阿里大牛:華先勝、丁險峰直播分享!

周四晚7點,阿里巴巴集團副總裁華先勝——《人工智能:是風、是云,還是雨?》

面向開發者詳解視覺智能技術規?;涞氐奶魬?#xff1b;面向企業詳述如何通過核心AI技術、產品化 及平臺化實現客戶價值并構建壁壘?

即刻報名:https://edu.csdn.net/huiyiCourse/detail/1163

推薦閱讀:從Kubernetes安全地訪問AWS服務,告訴你多云場景下如何管理云憑據! 解析云原生與云計算本質區別,別再傻傻分不清楚了! Go 大敗!Google 宣布 Fuchsia 終端開發只支持 C/C++/Dart 干貨!從0到1教你打造一個令人上癮的聊天機器人? 游戲之道 真實版“刪庫跑路”?程序員蓄意破壞線上生產環境!真香,朕在看了!點擊“閱讀原文”,參與調查

總結

以上是生活随笔為你收集整理的数据科学家常见的5个SQL面试问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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