欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

「数据库」sql刷题(No.3)

程序员文章站 2022-05-09 14:06:43
...

喜欢就 关注 我们吧!

简介: 

Hello 各位 ,我是公号「八点半技术站」的创作者 - Bruce.D (姓氏:豆)。

感谢微信给予的个人认证,专注于PHP、数据库技术领域知识经验分享。

技术的交流、不仅仅限制于阅读,因此我特地创建了一个「红包激励机制」的 sql 刷题群,红包激励机制内容,我将以图片形式放在文章底部(欧力给)。

前俩篇有 90+ 的伙伴在评论区打卡留言,参与红包激励制的 sql刷题学习。 

题目一:

编写一个 SQL 查询,获取 person 表中第二高的薪水。(薪水字段:salary)。

注意SQL查询应该返回 70 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

例如下图:

「数据库」sql刷题(No.3)

解答方法:

这里给大家提供 3 种解答方式 ,也有其他写法~~~(以下解答方式,已经过测试

第一种:

使用 子查询 和 LIMIT 子句 的方式

将不同的薪资按降序排序,然后使用 LIMIT 子句获得第二高的薪资

SELECT DISTINCT
    salary AS seconed_salary
FROM
    person
ORDER BY salary DESC
LIMIT 1 OFFSET 1

如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。

SELECT
  (SELECT DISTINCT
      salary
   FROM
      person
   ORDER BY salary DESC
  LIMIT 1 OFFSET 1) AS seconed_salary

第二种:

使用使用 IFNULL 和 LIMIT 子句 方式

解决 “ NULL ” 问题的另一种方法是使用 “ IFNULL ” 函数。

SELECT
   IFNULL(
     (SELECT DISTINCT salary
        FROM person
        ORDER BY salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS seconed_salary


第三种:

使用 oracle 、mysql 通用方式

select max(salary) seconed_salary
from person
where salary < (select max(salary) from person)

题目二:

这是一张 world 表,如果一个家族占地面积超过4000平方公里,或者人口超过200,那么这个家族就是大家族(夸张修辞...Haaahaa)。

编写一条 sql,找出满足这些条件的家族,告诉我他的名字、人口 与 占地。

例如下图:

「数据库」sql刷题(No.3)

解答方法:

这里给大家提供 1 种解答方式 ,也有其他写法~~~(以下解答方式,已经过测试

第一种:

使用 WHERE 子句和 UNION 的方式

SELECT
    name, population, area
FROM
    world
WHERE
    area > 4000


UNION


SELECT
    name, population, area
FROM
    world
WHERE
    population > 200

结尾总结:

这 2 道题类型评定:简单类型 。第一道题,解答方式多,第三种写法采用 oracle与mysql 通用的写法。第二道题,那种写法会比使用 where子句和 or要运行快(但是他们写法没什么差别)。

不管大家有没有其他方式,没必要会灰心,坚持打卡下去,做不一样的自己。

恭喜你、打卡成功一天,记得留言区评论:打卡+ x 天(x代表你打卡次数);

机器人会统计打卡次数,每周公布一次打卡数据。

往下拉,红包机制内容

和我再战 n+1 天

「数据库」sql刷题(No.3)

同时,为了方便大家学习,我会把一些源码、技术干货存储到 github 中,随时可以在微信群 进行交流,扫下面二维码 ,备注 “技术进群” 就可以通过审核。

「数据库」sql刷题(No.3)「数据库」sql刷题(No.3)

进群的小伙伴请加右侧私人微信(备注:技术进群)

----投稿分隔线----

投稿,关注公众号回复“投稿”,专员对接

-----商务合作分隔线----

商务合作,关注公众号回复“商务合作”,专员