Person
+-------------+---------+
| 列名 | 類型 |
+-------------+---------+
| PersonId | int | 主鍵
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
Address
+-------------+---------+
| 列名 | 類型 |
+-------------+---------+
| AddressId | int | 主鍵
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
編寫一個(gè) SQL 查詢,滿足條件:無(wú)論 person 是否有地址信息,都需要基于上述兩表提供 person 的以下信息:
FirstName, LastName, City, State
答案:
select FirstName,LastName,City,State from
Person left join Address on Person.PersonId=Address.PersonId;
編寫一個(gè) SQL 查詢,獲取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查詢應(yīng)該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那么查詢應(yīng)返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
答案
select FirstName,LastName,City,State from
Person left join Address on Person.PersonId=Address.PersonId;
編寫一個(gè) SQL 查詢,獲取 Employee 表中第 n 高的薪水(Salary)。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,n = 2 時(shí),應(yīng)返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查詢應(yīng)返回 null。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
答案
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
set N = N - 1;
RETURN (
select ifnull((select distinct Salary from Employee
order by Salary DESC limit 1 offset N),null) as NthHighestSalary
);
END
編寫一個(gè) SQL 查詢來(lái)實(shí)現(xiàn)分?jǐn)?shù)排名。
如果兩個(gè)分?jǐn)?shù)相同,則兩個(gè)分?jǐn)?shù)排名(Rank)相同。
請(qǐng)注意,平分后的下一個(gè)名次應(yīng)該是下一個(gè)連續(xù)的整數(shù)值。換句話說(shuō),名次之間不應(yīng)該有“間隔”。
+----+-------+
| Id | Score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
例如,根據(jù)上述給定的 Scores 表,你的查詢應(yīng)該返回(按分?jǐn)?shù)從高到低排列):
+-------+------+
| Score | Rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
答案
select Score,dense_rank() over(order by Score DESC) as 'Rank' from Scores;
編寫一個(gè) SQL 查詢,查找所有至少連續(xù)出現(xiàn)三次的數(shù)字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,給定上面的 Logs 表, 1 是唯一連續(xù)出現(xiàn)至少三次的數(shù)字。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
答案
select distinct Num as ConsecutiveNums
from(
select Num,
case
when @current = Num then @count:=@count+1
when (@current := Num) then @count := 1
end c_number
from Logs,(select @current := 0,@count := 0) as t
-- where c_number>=3
) as newLogs where newLogs.c_number>=3
此處where條件不能寫在子查詢內(nèi),會(huì)報(bào)出找不到c_number這個(gè)別名的錯(cuò)誤,
嘗試過(guò)Logs.c_number和t.c_number。不知道原因。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。