力扣数据库实例代码--第一节

第一题

现有表Person,字段为PersonId、FirstName、LastName;表Address,字段为Address、PersonId、City、State

要求:请编写一个SQL查询,满足条件:无论Person是否有地址信息,都需要基于两表提供Person的FirstName、 LastName、 City、 State

select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId;

解析:当Address无地址信息时,仍然需要提供上述信息,所以需要使用left join,当使用join时,条件关键字需要使用on

第二题

现有表Employee,字段为Id、Salary

要求:显示第二高的薪水,如果不存在第二高的薪水,那么查询应返回Null值

select ifnull((select distinct Salary from Employee order by Salary desc limit 1 offset 1), null) as SecondHighestSalary;

解析:当使用排序时,select关键字后需要使用distinct进行去重,对于空值筛选可以使用ifnull(值1,值2),表示值1为空时,显示值2的数值

第三题

现有表Employee,字段为Id、Salary

要求:显示第N高的薪水,如果不存在第N高的薪水,则返回Null值

create function getNthHighestSalary(N INT) returns int
begin
declare m int;
set m = N-1;
	return(
		select ifull((select distinct Salary from Employee order by Salary limit m, 1), null) as getNthHighestSalary
	);
end

解析:在limit中无法进行计算,所以如果需要计算需要提前定义变量,定义变量需要使用declare关键字进行声明,随后使用set进行赋值

第四题

现有表Scores,字段为Id、Score

要求:请为分数排名,排名连续,相同成绩相同拍醒

select Score, (select count(distinct score) from Scores where score>=s.score) rank from Scores as s order by score desc;

解析:相对分数进行排序,随后逐个对其进行排名比较赋值

第五题

现有表Person,字段为Id、Email
要求:获取Person中的重复邮箱

select Email from Person group by Email having count(Email)>1;

解析:当使用group by 、order by 之后使用条件筛选时,需要使用having

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值