176. Second Highest Salary SQL查询语句中的 limit offset

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

Id | Salary
---|---
1 | 100
2 | 200
3 | 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

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值的数据忽略掉了。

[1] SQL查询语句中的 limit offset
[2]七月之星mysql的空值与NULL的区别
[3] MySQL 中NULL和空值的区别,索引列是否可空值或null

posted @ 2018-11-22 10:28  TianchiLiu  阅读(301)  评论(0编辑  收藏  举报