博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
176. Second Highest Salary SQL查询语句中的 limit offset
阅读量:6672 次
发布时间:2019-06-25

本文共 1834 字,大约阅读时间需要 6 分钟。

题目:

Write a SQL query to get the second highest salary from the Employee table

  • Id | Salary---|---1 | 1002 | 2003 | 300
For example, given the above Employee table, the query should return 200 as the second highest salary. If there is no second highest salary, then the query should return null.
  • SecondHighestSalary
    200

Wrong answer: 只有一条记录时报错

SELECT DISTINCT        Salary AS SecondHighestSalary      FROM        Employee      ORDER BY Salary DESC      LIMIT 1 OFFSET 1

1404954-20181122105033864-1229589273.png

answer1: 将Wrong answer的查询结果作为temp表

SELECT     (SELECT DISTINCT        Salary      FROM        Employee      ORDER BY Salary DESC      LIMIT 1 OFFSET 1) AS SecondHighestSalary

answer2: Using IFNULL

SELECT     IFNULL(        (SELECT DISTINCT             Salary         FROM            Employee        ORDER BY Salary DESC        LIMIT 1 OFFSET 1),    NULL) AS SecondHighestSalary

相关知识点

SQL查询语句中的 limit offset

① selete * from testtable limit 2,1;

② selete * from testtable limit 2 offset 1;

注意:

1.数据库数据计算是从0开始的

2.offset X是跳过X个数据,limit Y是选取Y个数据

3.limit X,Y 中X表示跳过X个数据,读取Y个数据

这两个都是能完成需要,但是他们之间是有区别的:

①是从数据库中第三条开始查询,取一条数据,即第三条数据读取,一二条跳过

②是从数据库中的第二条数据开始查询两条数据,即第二条和第三条。

mysql的空值与NULL的区别

  • 陷阱一:空值不一定为空
    • 一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。

    • 一个是具有TimesTamp数据类型的列。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间

    • 而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。
  • 陷阱二:空值不一定等于空字符
    • 一 是IS NULL 和IS NOT NULL关键字。
      如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用,SELECT语句中使用IFNULL函数。
      判断空字符串‘’,用 ='' 或者 <>''
    • 二是在mysql中为null的的字段不会走索引,做统计的时候也不会被统计进去,如果想统计进去必须做特定的处理,这样做比较复杂。可以给字段的值设置成0、一个特殊的值或者一个空串代替空值。

      如Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号 码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会 将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动含Null值的数据忽略掉了。

转载于:https://www.cnblogs.com/TianchiLiu/p/9999503.html

你可能感兴趣的文章
Java程序运行超时后退出或进行其他操作的实现
查看>>
手把手教你启用RemoteFX以及Hyper-V GPU卸载
查看>>
《交互式程序设计 第2版》一3.10 更进一步
查看>>
英伟达发布Tesla P4&P40两款基于Pascal架构的深度学习芯片
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.5 Windows界面相应操作
查看>>
《代码整洁之道:程序员的职业素养》一一1.3 首先,不行损害之事
查看>>
intellij 创建java web项目(maven管理的SSH)
查看>>
spring-java项目中连接redis数据库
查看>>
UML介绍--用例图
查看>>
阿里云DTS VS MySQLdump
查看>>
为android封装的百度定位组件
查看>>
我的友情链接
查看>>
Linux系统新手学习的11点建议
查看>>
Android SDK:构建一个购物中心搜索的应用(二)-Points of Interest
查看>>
查询oracle数据库编码
查看>>
分发系统-expect-批量同步文件、批量执行命令
查看>>
activiti相关配置
查看>>
Exchange 2010邮件收发信大小限制
查看>>
js闭包浅了解
查看>>
c++中const引用传值
查看>>