如何一條sql語句查找表中第二大值


例1:

         一個Customer表,一個字段Value,現請問如何查到Value中第二大的值

          select max(value) from Customer where value < (select max(value) from Customer)

例2:

       數據庫中人表有三個屬性,用戶(編號,姓名,身高),查詢出該身高排名第二的高度。

   

1、查詢出沒有重復值的第二名,即假如最高的身高是182,有幾個人同時身高是182,則查出身高小於182的的最高的身高值。

1>、方式1:

select MAX(height) from users where height < (select MAX(height) from users );

    意義:先查詢出最高的身高值,然后查詢身高小於該值的最高身高。

2>、方式2:

select top 1 height from users where height not in (select MAX(height) from users) order by height desc;

  意義:先查詢出最高的身高,排除該身高,然后將數據進行排序(降序),查詢出當前的第一條數據。

 

3>、方式3:使用RANK()函數

  rank函數考慮到了over子句中排序字段值相同的情況,值相同的時候RANK函數的到的值相等。

select top 1 height from ( select *,RANK() OVER (ORDER BY height desc) AS Rank from users ) t where rank<>1

   意義:給每一個記錄一個行號,使用RANK函數,去掉身高值最高的記錄(重復值的rank函數獲得值相同)。

  

2、查詢出可能與最高身高值相同的第二名,即假如身高最高是182,有幾個人同時是182身高,第二名依然是182.

1>、方式1:

select top 1 * from (select top 2 height from users order by height desc) s order by height asc;

  意義:將數據按照身高(降序)排列,查詢出前面的兩項,然后將這兩項按照身高升序,查詢第一項目。

 

2>、方式2:row_number函數的用途是非常廣泛,這個函數的功能是為查詢出來的每一行記錄生成一個序號(不考慮重復值)。

select top 1 height from ( select *,ROW_NUMBER() OVER (ORDER BY height desc) AS Rank from users ) t where rank<>1

  意義:給每一個記錄一個行號ROW_NUMBER使用函數,去掉身高值最高的記錄(重復值的ROW_NUMBER函數獲得值不同)。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM