数据库 CURD测试题【中等】
文章目錄
- 1.換座位(交換相鄰的id)
- 基本信息
- 要求
- 答案[case when]
- 2.分數(shù)排名(分組,排序)
- 基本信息
- 要求
- 答案
- 3.連續(xù)出現(xiàn)的數(shù)字(連接)
- 信息
- 要求
- 答案
- 4.第N高的薪水(函數(shù))
- 信息
- 要求
- 答案
- 5.各個部門工資最高的員工(分組,連接)
- 信息
- 要求
- 答案
- 6.統(tǒng)計各專業(yè)人數(shù)
- 7.查詢回答率最高的問題
- 8.至少有5名直接下屬的經(jīng)理
1.換座位(交換相鄰的id)
基本信息
小美是一所中學(xué)的信息科技老師,她有一張 seat 座位表,平時用來儲存學(xué)生名字和與他們相對應(yīng)的座位 id。
其中縱列的 id 是連續(xù)遞增的
小美想改變相鄰倆學(xué)生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結(jié)果呢?
示例:
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
要求
假如數(shù)據(jù)輸入的是上表,則輸出結(jié)果如下:
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
- 注意:
如果學(xué)生人數(shù)是奇數(shù),則不需要改變最后一個同學(xué)的座位。
答案[case when]
select(casewhen mod(id,2) = 1 and id != (select count(*) from seat) then id+1when mod(id,2)=0 then id-1else id end) as id , student from seat order by id asc2.分數(shù)排名(分組,排序)
基本信息
編寫一個 SQL 查詢來實現(xiàn)分數(shù)排名。如果兩個分數(shù)相同,則兩個分數(shù)排名(Rank)相同。請注意,平分后的下一個名次應(yīng)該是下一個連續(xù)的整數(shù)值。換句話說,名次之間不應(yīng)該有“間隔”。
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
要求
例如,根據(jù)上述給定的 Scores 表,你的查詢應(yīng)該返回(按分數(shù)從高到低排列):
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
答案
select s.Score, count(distinct t.Score) Rank from Scores s join Scores t on s.Score <= t.Score group by s.Id order by s.Score desc;3.連續(xù)出現(xiàn)的數(shù)字(連接)
信息
編寫一個 SQL 查詢,查找所有至少連續(xù)出現(xiàn)三次的數(shù)字。
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
要求
例如,給定上面的 Logs 表, 1 是唯一連續(xù)出現(xiàn)至少三次的數(shù)字。
| 1 |
答案
這道題給了我們一個Logs表,讓我們找Num列中連續(xù)出現(xiàn)相同數(shù)字三次的數(shù)字,那么由于需要找三次相同數(shù)字,所以我們需要建立三個表的實例,我們可以用l1分別和l2, l3內(nèi)交,l1和l2的Id下一個位置比,l1和l3的下兩個位置比,然后將Num都相同的數(shù)字返回即可:
解法一:
select distinct l1.Num as ConsecutiveNums from Logs l1 join Logs l2 on l1.Id = l2.Id - 1 join Logs l3 on l1.Id = l3.Id - 2 where l1.Num = l2.Num and l2.Num = l3.Num;我們在本地已經(jīng)新建了表Logs.
4.第N高的薪水(函數(shù))
信息
編寫一個 SQL 查詢,獲取 Employee 表中第 n 高的薪水(Salary)。
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
要求
例如上述 Employee 表,n = 2 時,應(yīng)返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查詢應(yīng)返回 null。
| 200 |
答案
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGINSET N = N - 1;RETURN (select distinct Salary from Employee group by Salaryorder by Salary desc limit 1 offset N); END5.各個部門工資最高的員工(分組,連接)
信息
Employee 表包含所有員工信息,每個員工有其對應(yīng)的 Id, salary 和 department Id。
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
Department 表包含公司所有部門的信息。
| 1 | IT |
| 2 | Sales |
要求
編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據(jù)上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。
| IT | Max | 90000 |
| Sales | Henry | 80000 |
答案
select Department.Name as Department, Employee.Name as Employee,Salary from Employee join Department on Employee.DepartmentId = Department.Id where (Employee.salary, Employee.departmentId) in (select max(salary),departmentIdfrom employeegroup by departmentId );6.統(tǒng)計各專業(yè)人數(shù)
7.查詢回答率最高的問題
8.至少有5名直接下屬的經(jīng)理
SELECTName FROMEmployee AS t1 JOIN(SELECTManagerIdFROMEmployeeGROUP BY ManagerIdHAVING COUNT(ManagerId) >= 5) AS t2ON t1.Id = t2.ManagerId);總結(jié)
以上是生活随笔為你收集整理的数据库 CURD测试题【中等】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Springboot未登录请求拦截器实现
- 下一篇: mysql技术内幕《读书笔记》