Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara mengambil gaji tertinggi ke-n dari sebuah tabel tanpa menggunakan TOP dan sub-kueri?

Coba CTE - Ekspresi Tabel Umum:

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

Ini mendapatkan 5 gaji teratas dalam urutan menurun - Anda dapat bermain dengan RowNumn nilai dan pada dasarnya mengambil setiap bagian dari daftar gaji.

Ada fungsi peringkat lainnya tersedia di SQL Server yang dapat digunakan juga - mis. ada NTILE yang akan membagi hasil Anda menjadi n grup dengan ukuran yang sama (sedekat mungkin), sehingga Anda dapat mis. buat 10 grup seperti ini:

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

Ini akan membagi gaji Anda menjadi 10 kelompok dengan ukuran yang sama - dan satu dengan NTile=1 adalah kelompok gaji "TOP 10%".



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan konten XML dengan pengkodean ISO-8859-1 menggunakan Entity Framework ke dalam kolom XML SQL Server 2008 memberikan kesalahan penyandian

  2. 7 Fakta Tentang Sinonim SQL Server Yang Harus Anda Ketahui

  3. Gunakan set dalam pernyataan kasus di SQL Server

  4. SQL Server Internal:Operator Bermasalah Pt. III – Mengurutkan

  5. Memasukkan dan mengubah data dari tabel SQL