惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
月光博客
月光博客
D
DataBreaches.Net
L
LangChain Blog
美团技术团队
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
I
InfoQ
U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
腾讯CDC
Martin Fowler
Martin Fowler

博客园 - 秋雨飘飘

显示日期的javascript日历 Iframe的基础应用——关于Iframe刷页问题的两种方法 关于left join的讨论 往表中允许为null的字段插入null值 - 秋雨飘飘 - 博客园 sql查询最大最小值 SQL Server CHARINDEX和PATINDEX详解 sql行列转换 sql语句优化的一些测试函数 存储过程的作用是自动生成编号 数据库管理常用SQL SQL Server 中多行多列连接成为单行单列 T-SQL 编程规范和优化技巧 (转)SQL Server 索引结构及其使用 动态查询SQL中变量的返回值 存储过程的编写经验 表连接的比较left join/right join/inner join sql 视图 sql 日期函数之对于周的处理 如何提升checkbox的用户体验
求薪水第三高的雇员的SQL题(图解)
秋雨飘飘 · 2007-07-11 · via 博客园 - 秋雨飘飘

数据库结构如下:
TableA: Salary(薪水)
  EmpID                 
varchar(10)     not null
  DepartID              
varchar(5)      not null             foreign key references Department(DepartID) 
  Salary                   numeric(
12)   null

TableB: Department(部门)
  DepartID              
varchar(5)
  DepartName         
varchar(50)

TableC: Employee(雇员)
  EmpID                  
varchar(10)     not null             primary key,
  EmpName             
varchar(20)     not null

要求:写一个SQL语句,找出薪水为第三高的雇员的名字,所在部门以及薪资。

思路:
    从高到低,取出薪资的前3名,再在这3名中取最小值。

SQL语句如下:
SELECT E.EmpName, S.Salary, D.DepartName                   --取雇员名字,薪资数,部门名
FROM t_Employee AS E, t_Salary AS S, t_Department AS D
WHERE S.EmpID=E.EmpID
AND S.DepartID=D.DepartID
AND S.EmpID in(
      
SELECT S.EmpID FROM t_Salary S
      
WHERE S.Salary in(
          
SELECT min(S.Salary) FROM t_Salary S                    --在取出的前3名中取最小值
          WHERE S.Salary in(
              
SELECT TOP 3 S.Salary FROM t_Salary S ORDER BY S.Salary DESC    --从高到低取薪资前3名
          )
      )
)
AND S.DepartID in(
      
SELECT S.DepartID FROM t_Salary S
      
WHERE S.Salary in(
          
SELECT min(S.Salary) FROM t_Salary S
          
WHERE S.Salary in(
              
SELECT TOP 3 S.Salary FROM t_Salary S ORDER BY S.Salary DESC
          )
      )
);