登陆

极彩平台登录-SQL一个简略让你打脸很疼的编程言语

admin 2020-02-14 272人围观 ,发现0个评论

PS:题目来自leetcode,如有侵权通知即删除,谢谢!!

  1. 无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息

表1: Person

+-------------+---------+

| 列名 | 类型 |

+-------------+---------+

| PersonId | int |

| FirstName | varchar |

| LastName | varchar |

+-------------+---------+

PersonId 是上表主键

表2: Address

+-------------+---------+

| 列名 | 类型 |

+-------------+---------+

| AddressId | int |

| PersonId | int |

| City | varchar |

| State | varchar |

+-------------+---------+

AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

ANSWER:

select a.FirstName, a.LastName, b.City, b.State from Person a

left join Address b on a.PersonId = b.PersonId

2.获取 Employee 表中第二高的薪水(Salary)

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+----+--------+

| Id | Salary |

+----+--------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

+----+--------+

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+---------------------+

| SecondHighestSalary |

+---------------------+

| 200 |

+---------------------+

ANSWER:

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

3.实现分数排名

编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

+----+-------+

| Id | Score |

+----+-------+

| 1 | 3.50 |

| 2 | 3.65 |

| 3 | 4.00 |

| 4 |极彩平台登录-SQL一个简略让你打脸很疼的编程言语 3.85 |

| 5 | 4.00 |

| 6 | 3.65 |极彩平台登录-SQL一个简略让你打脸很疼的编程言语

+----+-------+

例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

+-------+------+

| Score | Rank |

+-------+------+

| 4.00 | 1 |

| 4.00 | 1 |

| 3.85 | 2 |

| 极彩平台登录-SQL一个简略让你打脸很疼的编程言语3.65 | 3 |

| 3.65 | 3 |

| 3.50 | 4 |

+-------+------+

ANSWER:

select s1.Score,count(distinct(s2.score)) Rank

from Scores s1,Scores s2

where s1.score <= s2.score

group by s1.极彩平台登录-SQL一个简略让你打脸很疼的编程言语ID

order by Rank

4.查找所有至少连续出现三次的数字(ID连续!!!)

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

+----+-----+

| Id | Num |

+----+-----+

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

| 4 | 2 |

| 5 | 1 |

| 6 | 2 |

| 7 | 2 |

+----+-----+

例如,给定上面的 Logs 表, 1 是唯一极彩平台登录-SQL一个简略让你打脸很疼的编程言语连极彩平台登录-SQL一个简略让你打脸很疼的编程言语续出现至少三次的数字。

+-----------------+

| ConsecutiveNums |

+-----------------+

| 1 |

+-----------------+

ANSWER:

select distinct a.Num as ConsecutiveNums

from Logs as a,Logs as b,Logs as c

where a.Num=b.Num and b.Num=c.Num and a.id=b.id-1 and b.id=c.id-1;

5.Employee 表中第 n 高的薪水(Salary)

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

+----+--------+

| Id | Salary |

+----+--------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

+----+--------+

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

+------------------------+

| getNthHighestSalary(2) |

+------------------------+

| 200 |

+------------------------+

ANSWER

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT

BEGIN

RETURN (

DECLARE P INT DEFAULT N-1;

IF (P < 0) THEN

RETURN NULL;

ELSE

RETURN (

SELECT IFNULL(

(

SELECT DISTINCT Salary

FROM Employee

ORDER BY Salary DESC

LIMIT P,1

),NULL

) AS SecondHighestSalary

);

卷发棒怎么用END IF;

END

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP