1. 編寫一個 sql 查詢,找出每個部門工資前三高的員工
Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id 。
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
+----+-------+--------+--------------+
Department 表包含公司所有部門的信息。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
編寫一個 SQL 查詢,找出每個部門工資前三高的員工。例如,根據上述給定的表格,查詢結果應返回:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
Sql如下:
SELECT
d.Name Department,e1.Name Employee,e1.Salary Salary
FROM
Employee e1,
Employee e2 ,
Department d
WHERE
e1.DepartmentId = e2.DepartmentId
AND e1.Salary <= e2.Salary
and e1.DepartmentId=d.Id
group by e1.id
having count(DISTINCT e2.Salary)<=3
order by d.Name,e1.Salary desc
2. sql查詢:部門工資前三高的員工和部門工資最高的員工
Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id 。
+------+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+------+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Randy | 85000 | 1 |
+------+-------+--------+--------------+
Department 表包含公司所有部門的信息。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
編寫一個 SQL 查詢,找出每個部門工資前三高的員工。
例如,根據上述給定的表格,查詢結果應返回:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
不妨假設e1=e2=[6,5,4,3],則子查詢的過程如下:
1、e1.Salary=3;則e2.Salary可以取4、5、6;COUNT(DISTINCT e2.Salary)=3
2、e1.Salary=4;則e2.Salary可以取5、6;COUNT(DISTINCT e2.Salary)=2
3、e1.Salary=5;則e2.Salary可以取6;COUNT(DISTINCT e2.Salary)=1
4、e1.Salary=6;則e2.Salary無法取值;COUNT(DISTINCT e2.Salary)=0
則要令COUNT(DISTINCT e2.Salary) < 3 的情況有上述的4、3、2.
也即是說,這等價於取e1.Salary最大的三個值。
3. 經典面試題-大廠SQL題目
正確答案:
正確答案:
給定 Employee 表,編寫一個 SQL 查詢,該查詢可以獲取收入超過他們經理的員工的姓名。在上面的表格中,Joe 是唯一一個收入超過他的經理的員工。
正確答案:
Customers 表:
Orders 表:
例如給定上述表格,你的查詢應返回:
正確答案:
例如,給定上面的 Logs 表, 1 是唯一連續出現至少三次的數字。
正確答案:
或者
例如,根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列):
正確答案:
例如上述 Employee 表,n = 2 時,應返回第二高的薪水 200。如果不存在第 n 高的薪水,那麼查詢應返回 null。
正確答案:
示例:
假如數據輸入的是上表,則輸出結果如下:
注意:
如果學生人數是奇數,則不需要改變最後一個同學的座位。
正確答案:
例如,根據上述給定的 Weather 表格,返回如下 Id:
正確答案:
Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id。
Department 表包含公司所有部門的信息。
編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。
正確答案:
表1: Person
PersonId 是上表主鍵
表2: Address
AddressId 是上表主鍵
編寫一個 SQL 查詢,滿足條件:無論 person 是否有地址信息,都需要基於上述兩表提供 person 的以下信息:
FirstName, LastName, City, State
正確答案:
注意,您必只能寫一個 Update 語句,請不要編寫任何 Select 語句。
例如:
運行你所編寫的更新語句之後,將會得到以下表:
正確答案:
這里有張 World 表
如果一個國家的面積超過300萬平方公里,或者人口超過2500萬,那麼這個國家就是大國家。
編寫一個SQL查詢,輸出表中所有大國家的名稱、人口和面積。
例如,根據上表,我們應該輸出:
正確答案:
Id 是這個表的主鍵。
例如,在運行你的查詢語句之後,上面的 Person 表應返回以下幾行:
正確答案:
Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id 。
Department 表包含公司所有部門的信息。
編寫一個 SQL 查詢,找出每個部門工資前三高的員工。例如,根據上述給定的表格,查詢結果應返回:
正確答案
例如上述 Employee 表,SQL查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。
正確答案:
例如,下表 cinema:
對於上面的例子,則正確的輸出是為:
正確答案:
請列出所有超過或等於5名學生的課。
例如,表:
應該輸出:
Note:
學生在每個課中不應被重復計算。
正確答案:
Users 表存所有用戶。每個用戶有唯一鍵 Users_Id。Banned 表示這個用戶是否被禁止,Role 則是一個表示(『client』, 『driver』, 『partner』)的枚舉類型。
寫一段 SQL 語句查出 2013年10月1日 至 2013年10月3日 期間非禁止用戶的取消率。基於上表,你的 SQL 語句應返回如下結果,取消率(Cancellation Rate)保留兩位小數。
正確答案
示例:
根據以上輸入,你的查詢應返回以下結果:
說明:所有電子郵箱都是小寫字母。
正確答案:
請編寫一個查詢語句,找出高峰期時段,要求連續三天及以上,並且每天人流量均不少於100。
例如,表 stadium:
對於上面的示例數據,輸出為:
Note:
每天只有一行記錄,日期隨著 id 的增加而增加。
正確答案: