前言 好好學習,天天向上。 正文 好像也是一個不難的問題,剛視頻里看到的,就記一下吧。 下麵是表中原始的數據結構,做了一個倒敘排序: 首先來看一下如何取Salary第二的記錄。 原理是先獲取到最大的salary-maxSalary,然後根據salary降序排序,取第一條salary小於該maxSal ...
前言
好好學習,天天向上。
正文
好像也是一個不難的問題,剛視頻里看到的,就記一下吧。
下麵是表中原始的數據結構,做了一個倒敘排序:
select * from Employee order by Salary desc
首先來看一下如何取Salary第二的記錄。
--獲取salary排行第二的人的信息 select top 1 * from Employee where Salary < (select max(salary) from Employee ) order by Salary desc
原理是先獲取到最大的salary-maxSalary,然後根據salary降序排序,取第一條salary小於該maxSalary的記錄.
下麵來看一下如何取Salary第三的記錄
--獲取salary排行第三的人的信息 select top 1 * from ( select top 3 * from Employee order by Salary desc ) as result order by Salary asc
原理是先根據Salary降序排序獲取到前3條記錄,作為Result一個結果集
然後再在這個結果集裡面用Salary升序排序,取第一條。
下麵再來看一下使用ROW_NUMBER(順道試驗了Rank,Dense_Rank這兩個函數)這個函數的寫法:
--獲取salary排行第三的人的信息 select * from ( select * ,row_number () over (order by salary desc) as RowNumber,RANK() over (order by salary desc) as RankNumber,DENSE_RANK() over (order by salary desc) as DenseRankNumber from Employee ) as Result where Result.RowNumber =3
先看一下Result這個函數的結果集:
註意一下B和C的salary是一樣的,但是得到的3個number值是不同的,項目中看具體情況,選擇需要的函數。
我們這裡取RowNumber.
結果也是一樣的。
就到這裡吧。