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

Permintaan SQL untuk menemukan gaji tertinggi ke-N dari tabel gaji

Anda dapat menggunakan Common Table Expression (CTE) untuk mendapatkan jawabannya.

Katakanlah Anda memiliki gaji berikut dalam tabel Gaji:

 EmployeeID  Salary
--------------------
     10101   50,000
     90140   35,000
     90151   72,000
     18010   39,000
     92389   80,000

Kami akan menggunakan:

DECLARE @N int
SET @N = 3  -- Change the value here to pick a different salary rank

SELECT Salary
FROM (
    SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
    FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N

Ini akan membuat nomor baris untuk setiap baris setelah diurutkan berdasarkan Gaji dalam urutan menurun, lalu mengambil baris ketiga (yang berisi rekor tertinggi ketiga).

  • Fiddle SQL

Bagi Anda yang tidak menginginkan CTE (atau terjebak dalam SQL 2000):

[Catatan :kinerjanya terasa lebih buruk daripada contoh di atas; menjalankannya secara berdampingan dengan rencana eksekusi menunjukkan biaya kueri sebesar 36% untuk CTE dan 64% untuk subkueri]:

SELECT TOP 1 Salary
FROM 
(
    SELECT TOP N Salary
    FROM Salaries
    ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC

di mana N didefinisikan oleh Anda.

SalarySubquery adalah alias yang saya berikan ke subquery, atau kueri yang ada di dalam tanda kurung.

Apa yang dilakukan subquery adalah memilih gaji N teratas (kita akan mengatakan 3 dalam hal ini), dan memerintahkan mereka dengan gaji terbesar.

Jika kita ingin melihat gaji tertinggi ketiga, subquery akan kembali:

 Salary
-----------
80,000
72,000
50,000

Kueri luar kemudian memilih gaji pertama dari subkueri, kecuali kali ini kami mengurutkannya secara menaik, yang diurutkan dari yang terkecil hingga terbesar, jadi 50.000 akan menjadi catatan pertama yang diurutkan secara menaik.

Seperti yang Anda lihat, 50.000 memang merupakan gaji tertinggi ketiga dalam contoh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus karakter ASCII yang diperluas dari string di T-SQL?

  2. Hasil SSMS ke Kotak - CRLF tidak disimpan dalam salin/tempel - ada teknik yang lebih baik?

  3. Cara menggunakan UPDATE dari SELECT di SQL Server

  4. Bagaimana saya bisa mengunci tabel saat dibaca, menggunakan Entity Framework?

  5. Cara Mendapatkan Semua Tabel yang Memiliki Batasan Kunci Utama Dibuat di Database SQL Server - Tutorial SQL Server / TSQL 57