前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-SQL(一)

LeetCode-SQL(一)

作者头像
_一级菜鸟
发布2019-12-20 12:17:33
4440
发布2019-12-20 12:17:33
举报
文章被收录于专栏:工厂程序员工厂程序员

1.组合两个表

表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | | FirstName | varchar | | LastName | varchar | +-------------+---------+ PersonId 是上表主键 表2: Address +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | AddressId | int | | PersonId | int | | City | varchar | | State | varchar | +-------------+---------+ AddressId 是上表主键 编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息: FirstName, LastName, City, State 这一题,比较简单用left join就可以了。

SQL语句如下:

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

2.第二高的薪水

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。 +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。 +---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+

这题也是一个入门题,找到排名第二的薪水,第一步先找到薪水最高的,然后排除掉,剩下的里面最高的也就是第二个的薪水。当查询不到时,SQL会自动返回为NULL。

SQL语句如下:

SELECT MAX(Salary) SecondHighestSalary FROM Employee A WHERE Salary<> (SELECT MAX(Salary) FROM Employee )

3.第N高的薪水

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。 +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。 +------------------------+ | getNthHighestSalary(2) | +------------------------+ | 200 | +------------------------+

这是一个中级题,第一步要排除用户输入的无效数字,比如负数和大于去重后的行数的,赋默认值0,返回null值。

第二步去重,使用distinct去除薪水相同的,然后按从大到小排列,使用top取前n行,再取其中最小的就是第n高的薪水

SQL语句如下:

CREATE FUNCTION getNthHighestSalary(@N INT) RETURNS INT AS

BEGIN

declare @num INT

select @num=count(distinct Salary) from EMPLOYEE

if(@N<0 or @N>@num)

set @N=0

RETURN (

select min(Salary) from EMPLOYEE where Salary in (

SELECT DISTINCT TOP (@N) Salary FROM EMPLOYEE order by Salary desc)

);

END

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/second-highest-salary

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档