前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql |那些关于第二大的事

mysql |那些关于第二大的事

作者头像
努力在北京混出人样
发布2018-05-14 14:40:43
1K0
发布2018-05-14 14:40:43
举报
文章被收录于专栏:祥子的故事

经常遇到关于第二大的计算,如找到销售量第二大的id等等这类问题。

一下是我的学习总结,有些来自网络,出处会给出详细的链接,方便寻找源码。


题目 :第二高的薪水

来源https://leetcode.com/problems/second-highest-salary/description/

方案一

代码语言:javascript
复制
SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary
;

保证了Salary只有唯一的输出,避免多个第二高的情况。

方案二

代码语言:javascript
复制
SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

解决了为空的问题,为空就输出NULL

方案三:

代码语言:javascript
复制
SELECT MAX(Salary) AS SecondHighestSalary
     FROM Employee 
         WHERE Salary < (SELECT MAX(Salary) FROM Employee)

参考http://blog.csdn.net/u010479690/article/details/25053937

为了方便自己日后参看,将http://blog.csdn.net/u010479690/article/details/25053937中的内容转过来。

拓展

mysql

表中的第二大id号

代码语言:javascript
复制
SELECT MAX(vcid) FROM msdtb1701 
     WHERE vcid < (SELECT MAX(vcid) FROM msdtb1701)

代码语言:javascript
复制
SELECT  MAX(vcid) FROM msdtb1701 
     WHERE vcid NOT IN (SELECT MAX(vcid) FROM msdtb1701)

表中的第二大id号及其user

代码语言:javascript
复制
SELECT vcuser ,vcid FROM msdtb1701 
     WHERE vcid=
            (SELECT MAX(vcid) FROM msdtb1701 WHERE vcid    
                 NOT IN (SELECT MAX(vcid) FROM msdtb1701))

表中第三大id号

代码语言:javascript
复制
SELECT MAX(vcid) FROM  msdtb1701 
     WHERE vcid < (SELECT  MAX(vcid) FROM msdtb1701 WHERE vcid 
              NOT IN (SELECT MAX(vcid) FROM msdtb1701))

表中前三大的id号及其user

代码语言:javascript
复制
SELECT vcid,vcuser FROM msdtb1701  ORDER BY vcid DESC LIMIT 3

注意:依照此数值调整限制输出行数

第N大的薪水

代码语言:javascript
复制
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT M, 1
  );
END

Sql Server

表中第N大数值

代码语言:javascript
复制
select TOP N * from tablename where

ORACLE

表中第N大的数值

代码语言:javascript
复制
SELECT * FROM TABLE1 WHERE ROWNUM<=N
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年10月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目 :第二高的薪水
    • 方案一
      • 方案二
        • 方案三:
        • 拓展
          • 表中的第二大id号
            • 表中的第二大id号及其user
              • 表中第三大id号
                • 表中前三大的id号及其user
                  • 第N大的薪水
                    • 表中第N大数值
                      • 表中第N大的数值
                      相关产品与服务
                      云数据库 MySQL
                      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档