美文网首页
sql复习强化每日五题——第一天

sql复习强化每日五题——第一天

作者: 如虎添 | 来源:发表于2020-09-15 09:32 被阅读0次
 Person
+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     | 主键
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+

Address
+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     | 主键
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+

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

答案:
select FirstName,LastName,City,State from 
Person left join Address on Person.PersonId=Address.PersonId;
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

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

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

答案
select FirstName,LastName,City,State from 
Person left join Address on Person.PersonId=Address.PersonId;
编写一个 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
  set N = N - 1;
  RETURN (
     select ifnull((select distinct Salary from Employee
     order by Salary DESC limit 1 offset N),null) as NthHighestSalary
  );
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 Score,dense_rank() over(order by Score DESC) as 'Rank' from Scores;
编写一个 SQL 查询,查找所有至少连续出现三次的数字。

+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

答案
select distinct Num as ConsecutiveNums
from(
    select Num,
    case 
        when @current = Num then @count:=@count+1
        when (@current := Num) then @count := 1
    end c_number
    from Logs,(select @current := 0,@count := 0) as t
    -- where c_number>=3
) as newLogs where newLogs.c_number>=3
此处where条件不能写在子查询内,会报出找不到c_number这个别名的错误,
尝试过Logs.c_number和t.c_number。不知道原因。

相关文章

  • sql复习强化每日五题——第一天

  • sql复习强化每日五题——第三天

  • sql复习强化每日五题——第二天

  • 56

    晚上8点。 我:8点到了,每日五题时间到了。 她:等我吃完这个橙子。 我:我们的约定是八点开始做每日五题。 她:妈...

  • 每日五题(2017-08-24)

    昨天开启了陆老师小课堂「每日五题」的第一篇推送,有很多读者私信或者后台留言问答案。这里陆老师简单介绍一下「每日五题...

  • 今日所学

    早晨我们吃了早饭,我们还上姥姥家去,早上我还在姥姥家写每日五题。中午我还在姥姥家吃午饭,中午我还在姥姥家写每日五题...

  • 日常小记

    早晨我们吃了早饭,我们还上姥姥家去,早上我还在姥姥家写每日五题。中午我还在姥姥家吃午饭,中午我还在姥姥家写每日五题...

  • 今日所学

    数学老师让我们复习昨天的作业,数学老师也说了打星号的出每日五题, 数学老师还让我们从黑板上做题。科学老师给我们讲了...

  • 2019-06-10

    今天语文课,老师让我们复习了第三单元,数学课老师让我们做了试卷,老师让把试卷上的题出在我们的作业每日五题上面,是为...

  • 我的每日五题0227

    从今天开始每日五题,在网上找的面试题和花花晚上复习一下,也通过这个巩固一下知识。 1.垂直居中的方法 首先水平居中...

网友评论

      本文标题:sql复习强化每日五题——第一天

      本文链接:https://www.haomeiwen.com/subject/smdzektx.html