第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+——+————+
| Id | Salary |
+——+————+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+——+————+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+——————————-+
| SecondHighestSalary |
+——————————-+
| 200 |
+——————————-+
• 要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),若想降序则使用关键字 desc
• 去重,如果有多个相同的数据,使用关键字 distinct 去重
• 判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 ifNull(查询,null)方法
• 起别名,使用关键字 as …
• 因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条)
第n 高薪水
select ifnull((select distinct Salary from Employee order by Salary desc limit 1,1),null) as SecondHighestSalary
编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
+——+————+
| Id | Salary |
+——+————+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+——+————+
例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
+————————————+
| getNthHighestSalary(2) |
+————————————+
| 200 |
+————————————+
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
select ifnull((select distinct Salary from Employee order by Salary desc limit N,1),null) as getNthHighestSalary
);
END
编写一个 SQL 查询来实现分数排名
如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
+——+———-+
| Id | Score |
+——+———-+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+——+———-+
例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):
+———-+———+
| Score | Rank |
+———-+———+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+———-+———+
select s1.Score,count(distinct(s2.score)) Rank
from
Scores s1,Scores s2
where
s1.score<=s2.score
group by s1.Id
order by Rank
找出连续出现三次的数字
+——————-+————-+
| Column Name | Type |
+——————-+————-+
| id | int |
| num | varchar |
+——————-+————-+
id 是这个表的主键。
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
查询结果格式如下面的例子所示:
Logs 表:
+——+——-+
| Id | Num |
+——+——-+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+——+——-+
Result 表:
+————————-+
| ConsecutiveNums |
+————————-+
| 1 |
+————————-+
1 是唯一连续出现至少三次的数字。
查找 Person 表中所有重复的电子邮箱
示例:
+——+————-+
| Id | Email |
+——+————-+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+——+————-+
根据以上输入,你的查询应返回以下结果:
+————-+
| Email |
+————-+
| a@b.com |
+————-+
说明:所有电子邮箱都是小写字母。
select * from Person group by Email having count(id)>=2
所有从不订购任何东西的客户
某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers 表:
+——+———-+
| Id | Name |
+——+———-+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+——+———-+
Orders 表:
+——+——————+
| Id | CustomerId |
+——+——————+
| 1 | 3 |
| 2 | 1 |
+——+——————+
select a.Name Customers from Customers a leftjoin Orders b on a.Id=b.CustomerId where b.CustomerId isnull