sql >> データベース >  >> RDS >> Sqlserver

TOPとサブクエリを使用せずにテーブルからn番目に高い給与を取得する方法は?

    CTE を試す - 共通テーブル式:

    WITH Salaries AS
    (
        SELECT 
           SalaryAmount, ROW_NUMBER() OVER(ORDER BY SalaryAmount DESC) AS 'RowNum'
        FROM 
           dbo.SalaryTable
    )
    SELECT
      SalaryAmount
    FROM
      Salaries
    WHERE
       RowNum <= 5
      

    これは上位 5 つの給与を降順で取得します - RowNumn で遊ぶことができます 値を取得し、基本的に給与のリストから任意のスライスを取得します。

    その他のランキング機能 があります SQL Server でも使用できます。 NTILE があります これにより、結果が等しいサイズの n 個のグループに (できるだけ厳密に) 分割されます。次のように 10 個のグループを作成します:

    WITH Salaries AS
    (
        SELECT 
           SalaryAmount, NTILE(10) OVER(ORDER BY SalaryAmount DESC) AS 'NTile'
        FROM 
           dbo.SalaryTable
    )
    SELECT
      SalaryAmount
    FROM
      Salaries
    WHERE
       NTile = 1
      

    これにより、あなたの給与が 10 個の同じサイズのグループに分割されます - そして NTile=1 のグループ 給与の「TOP 10%」グループです。



    1. phpとajaxの検索機能に問題がある

    2. 空の月を含む月ごとのグループ化

    3. SQLServerが存在しない場合は挿入

    4. 直接実行する場合と比較してHibernateselectのパフォーマンスが低い-どのようにデバッグしますか?