Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Gaji tertinggi ke-n

Pertanyaan paling umum dan penting yang ditanyakan dalam wawancara adalah bagaimana kita dapat menemukan gaji tertinggi ke-N dalam sebuah tabel (2 gaji tertinggi, 3 gaji tertinggi, atau gaji tertinggi ke-N), di mana N bisa menjadi 2, 3, 4, 5 atau apa pun.

Setiap programmer tahu cara termudah untuk menemukan n gaji tertinggi adalah dengan menggunakan SQL (Structured Query Language) dalam sebuah tabel.

Setiap kali pewawancara mengajukan pertanyaan tentang 2 gaji tertinggi, 4 gaji tertinggi, dan seterusnya, untuk menyelesaikan pertanyaan ini, kita harus mengetahui beberapa konsep penting seperti subquery, fungsi yang akan digunakan seperti row_num(), Rank Rank() , dll.

Artikel ini akan memberi tahu Anda berbagai cara untuk menemukan Gaji Tertinggi N.

Pertimbangkan tabel yang ada yang memiliki catatan berikut:

Tabel:Karyawan

KARYAWAN FIRST_NAME LAST_NAME GAJI KOTA DEPARTEMEN MANAGERID
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA C# 5
1003 NIKHIL VANI 50500 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI C# 5
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH BAIK 60500 MUMBAI UJI 4
4002 ASHWINI BAGHAT 54500 NOIDA JAVA 3
4003 RUCHIKA AGRWAL 60000 DELHI ORACLE 1
5001 ARKIT SHARMA 55500 DELHI UJI 4

N gaji tertinggi menggunakan subquery yang berkorelasi

Subquery berkorelasi adalah jenis subquery khusus, di mana subquery bergantung pada kueri utama dan dijalankan untuk setiap baris yang dikembalikan oleh kueri utama.

Sintaks:

SELECT salary from employees e1WHERE N-1 = (SELECT COUNT (DISINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Dimana N bisa diganti dengan angka 23, atau 4.

Contoh 1: Tulis kueri untuk menemukan 4 gaji tertinggi:

SELECT employeeid, salary from employees e1WHERE 3 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Dimana N =4, N -1:4 -1 =3.

4 gaji tertinggi dari tabel

Keluaran:

Karyawan Gaji
3003 58500

Penjelasan:

Kata kunci yang berbeda ada untuk menangani gaji yang digandakan dalam tabel. Untuk mencari N gaji tertinggi, kami hanya mempertimbangkan gaji non-duplikat. Gaji tertinggi berarti tidak ada gaji yang lebih tinggi darinya. Gaji tertinggi kedua berarti hanya satu gaji yang lebih besar dari itu. Gaji tertinggi ketiga berarti hanya dua gaji yang lebih tinggi dari gaji ketiga, demikian pula gaji tertinggi ke-N berarti gaji N-1 lebih besar dari itu.

Gaji tertinggi keempat adalah 58500 id karyawan 3003.

Contoh 2:Tulis kueri untuk menemukan 3 gaji tertinggi:

SELECT employeeid, salary from employees e1WHERE 3 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Dimana N =3, N -1:3 -1 =2.

2 gaji tertinggi dari tabel

Keluaran:

Karyawan Gaji
1002 60000
4003 60000

Gaji tertinggi kedua adalah 58500 dari dua id karyawan 1002 dan id karyawan 4003.

Contoh 3:Tulis kueri untuk menemukan 5 gaji tertinggi:

SELECT employeeid, salary from employees e1WHERE 6 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)

Dimana N =6, N -1:6 -1 =5.

5 gaji tertinggi dari tabel

Keluaran:

Karyawan Gaji
4002 54500

Gaji tertinggi kelima adalah 54.500 id karyawan 4002.

N Gaji tertinggi menggunakan LIMIT kata kunci

Sintaks:

SELECT salary FROM employees ORDER BY salary desc LIMIT N-1, 1;

Contoh 1: Tulis kueri untuk menemukan 2 gaji tertinggi.

SELECT employeeid, salary FROM employees ORDER BY salary desc LIMIT 1, 1;

Keluaran:

Karyawan Gaji
2002 65500

Batas 1, 1 dalam kueri mengatakan berapa gaji tertinggi yang akan ditampilkan.

Jika Anda menulis 1, 2 output akan seperti ini

Karyawan Gaji
2002 65500
4001 60500

N Gaji tertinggi menggunakan kata kunci TOP

Skenarionya adalah menghitung N gaji pegawai tertinggi dari tabel pegawai. Langkah-langkahnya adalah sebagai berikut:

1. Langkah pertama adalah mencari gaji unik TOP karyawan dari tabel.
2. Langkah selanjutnya adalah menghitung gaji minimum di antara semua gaji yang dihasilkan dari langkah pertama. Dengan langkah ini, kita mendapatkan N gaji tertinggi.
3. Dari hasil langkah-langkah di atas, mengidentifikasi rincian karyawan yang gajinya adalah gaji minimum.

Contoh 1:

SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));

Pernyataan SQL di atas digunakan untuk mencari rincian karyawan dengan gaji tertinggi.

Mari kita lihat penjelasan dari pernyataan SQL di atas secara singkat:

Pertimbangkan N =4.

Setiap kali kueri SQL menyertakan sub-kueri, ingat kueri dalam akan dieksekusi terlebih dahulu, lalu kueri luar akan dieksekusi.

Hasil berikut akan dihasilkan oleh kueri "SELECT DISTINCT TOP N gaji dari karyawan ORDER BY salary DESC", yang akan menghasilkan hasil berikut.

Gaji
65500
60500
60000
58500

Query luar berikutnya adalah:"SELECT MIN(salary) FROM employee WHERE salary IN (output dari query SQL sebelumnya.

Gaji
58500

Dari hasil di atas, diverifikasi bahwa gaji tertinggi keempat yang dibutuhkan adalah 58500.

Terakhir, query utama adalah SELECT * FROM employee WHERE salary =output dari query SQL sebelumnya. Output dari query ini adalah hasil dari karyawan yang memiliki gaji tertinggi keempat.

FIRST_NAME GAJI
DEEPAM 58500

Contoh 2:

SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));

Pernyataan SQL di atas digunakan untuk mencari rincian karyawan dengan gaji tertinggi N.

Mari kita lihat penjelasan dari pernyataan SQL di atas secara singkat:

Pertimbangkan N =5.

Setiap kali kueri SQL menyertakan sub-kueri, ingat kueri dalam akan dieksekusi terlebih dahulu, lalu kueri luar akan dieksekusi.

Hasil berikut akan dihasilkan oleh kueri "SELECT DISTINCT TOP N gaji dari karyawan ORDER BY salary DESC", yang akan menghasilkan hasil berikut.

Gaji
65500
60500
60000
58500
55500

Query luar berikutnya adalah:"SELECT MIN(salary) FROM employee WHERE salary IN (output dari query SQL sebelumnya.

Gaji
55500

Dari hasil di atas, diverifikasi bahwa gaji tertinggi kelima yang dibutuhkan adalah 55.500.

Terakhir, query utama adalah SELECT * FROM employee WHERE salary =output dari query SQL sebelumnya. Output dari query ini adalah hasil dari karyawan yang memiliki gaji tertinggi kelima.

FIRST_NAME GAJI
PRACHI 55500

Gaji tertinggi ke-N menggunakan fungsi Row_Num()

Contoh:

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;
  • Untuk menghitung gaji tertinggi ketiga, gunakan rownum <4
  • Untuk menghitung gaji tertinggi kedua, gunakan rownum <3

Keluaran:

MIN(gaji
60500

Mari kita lihat cara kerja kueri:

Langkah 1: Kueri termasuk subquery berarti kueri dalam dan kueri luar. Kita semua tahu ketika subquery digunakan dalam kueri, kueri dalam pertama kali dieksekusi

Pertama, inner query akan dieksekusi kemudian outer query akan dieksekusi berdasarkan output yang dihasilkan inner query:

Kueri batin:

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;

Keluaran dari kueri dalam:

Gaji
65500
60500
60000
58500
55500
54500
50500
50.000

Karena kami menggunakan kata kunci yang berbeda dalam kueri, gaji duplikat akan dihilangkan. Gaji unik akan ditampilkan sebagai hasil dari inner query.

Langkah 2: Saat server selesai dengan kueri dalam, kami mengeksekusi kueri luar dari kueri bersarang ke dalam output yang kami peroleh dari kueri dalam

SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER  BY salary DESC) WHERE rownum < 3;

PILIH MIN(gaji) DARI (output kueri dalam):pilih gaji minimum dari output kueri dalam, yaitu 50000 dan 50000 bukan gaji tertinggi kedua, karena itu kami telah menggunakan rownum <3, yang akan memberikan jumlah baris dari atas yang kurang dari 3 berarti hanya 2.

Output dari WHERE rownum <3:

Gaji
65500
60500

Langkah 3: Bagian terakhir dari kueri, yang merupakan SELECT MIN(gaji) dari (output dari WHERE rownum<3):

Hasil akhir dari kueri:

Gaji
60500

60.500 adalah gaji tertinggi kedua di meja karyawan.

Gaji tertinggi ke-N menggunakan fungsi Rank Rank()

Contoh:

SELECT * FROM(SELECT First_Name, salary, dense_rank()      OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank =&num;

- Untuk menghitung gaji tertinggi ketiga, gunakan num =3

- Untuk menghitung gaji tertinggi kedua, gunakan num =2

Kami akan memilih num =2.

Hasil akhir:

First_Name Gaji Peringkat
Rajesh 60500 2

O output dari kueri dalam:

SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) Rank FROM employees

Fungsi Dense_rank() menghitung Peringkat setiap baris dalam kelompok urutan baris dalam urutan menaik dan mengembalikan Peringkat sebagai angka. Peringkat dimulai dari 1 dan seterusnya.

Dalam hal dua atau lebih dari dua baris memiliki gaji yang sama, itu memberikan peringkat yang sama untuk semua baris.

Keluaran dari kueri dalam:

Nama_depan Gaji Peringkat
VAIBHAVI 65500 1
BHAVESH 65500 1
RAJESH 60500 2
VAIBHAV 60000 3
RUCHIKA 60000 3
DEEPAM 58500 4
PRACHI 55500 5
PRANOTI 55500 5
ARCHIT 55500 5
ASHWINI 54500 6
NIKHIL 50500 7
ANUJA 50500 7
RUCHIKA 50.000 8

Pada output, kita dapat melihat peringkat yang sama untuk menduplikasi gaji.

Langkah 2: Saat server selesai dengan kueri dalam, kami mengeksekusi kueri luar dari kueri bersarang ke dalam output yang kami peroleh dari kueri dalam

SELECT * FROM(SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank = &num;

Select * from akan memilih semua baris yang bukan merupakan gaji tertinggi kedua karena kita telah menggunakan RankRank dimana num =2 akan memberikan baris yang cocok sesuai dengan nilai yang dimasukkan oleh pengguna untuk num.

Seperti yang kita gunakan num =2, outputnya adalah

Nama_depan Gaji Peringkat
RAJESH 60500 2
  • Untuk mencari set gaji ketiga num =3,
  • Untuk mencari set gaji keempat num =4, dan seterusnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyelesaikan SQL. Kisah Sukses dan Kegagalan

  2. Menghubungkan PowerShell ke Salesforce.com

  3. Pertanyaan Wawancara Insinyur Data Dengan Python

  4. PEMBARUAN untuk Statistik

  5. Menggunakan Tabel Konfigurasi untuk Menentukan Alur Kerja yang Sebenarnya