Bagaimana menemukan third or nth
gaji maksimum dari gaji table(EmpID,EmpName,EmpSalary)
dengan cara yang Dioptimalkan?
sql
sql-server
sql-server-2008
Karan Gandhi
sumber
sumber
Jawaban:
Gunakan
ROW_NUMBER
(jika Anda menginginkan satu) atauDENSE_RANK
(untuk semua baris terkait):sumber
EmpSalary
kolom. Juga, dikurangi dibandingkan dengan apa? Keuntungan dariROW_NUMBER
pendekatan ini adalah Anda dapat menggunakan..OVER(PARTITION BY GroupColumn OrderBy OrderColumn)
. Jadi Anda dapat menggunakannya untuk mendapatkan grup tetapi tetap mengakses kolom mana pun.Nomor Baris:
Sub Query:
Kata Kunci Teratas:
sumber
... WHERE (N-1) = (Subquery)...
berhasil. Subkueri adalah kueri berkorelasi karenaWHERE
klausulnya menggunakanEmp1
dari kueri utama. Subkueri dievaluasi setiap kali kueri utama memindai baris. Contoh, jika kita mencari gaji terbesar ke-3 (N = 3) dari (800, 1000, 700, 750), subkueri untuk baris ke-1SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
adalah 0. Untuk nilai gaji ke-4 (750)... WHERE Emp2.Salary > 750
adalah 2, atau N -1, maka baris ini akan dikembalikan.Coba ini
Untuk 3 Anda dapat mengganti nilai apa pun ...
sumber
Jika Anda ingin mengoptimalkan cara berarti menggunakan
TOP
Kata kunci, Jadi permintaan gaji maks dan min ke-n sebagai berikut tetapi kueri tersebut terlihat rumit seperti dalam urutan terbalik dengan menggunakan nama fungsi agregat:N gaji maksimal:
untuk Contoh: 3 gaji maksimal:
N gaji minimum:
untuk Contoh: 3 gaji minimum:
sumber
Terlalu sederhana jika Anda menggunakan sub query!
Di sini Anda hanya dapat mengubah nilai ke-n setelah batasan LIMIT.
Di sini, di Sub query Pilih EmpSalary dari Employee Order oleh EmpSalary DESC Limit 3; akan mengembalikan gaji 3 teratas Karyawan. Dari hasil tersebut kita akan memilih gaji Minimum menggunakan perintah MIN untuk mendapatkan gaji TOP ke-3 dari karyawan tersebut.
sumber
Gantikan N dengan Nomor Maks Anda
Penjelasan
Kueri di atas bisa sangat membingungkan jika Anda belum pernah melihat yang seperti itu sebelumnya - kueri dalam adalah apa yang disebut sub-kueri berkorelasi karena kueri dalam (subkueri) menggunakan nilai dari kueri luar (dalam hal ini tabel Emp1 ) di klausa WHERE.
Dan Sumber
sumber
... WHERE (N-1) = (Subquery)...
berhasil. Subkueri adalah kueri berkorelasi karenaWHERE
klausulnya menggunakanEmp1
dari kueri utama. Subkueri dievaluasi setiap kali kueri utama memindai baris. Contoh, jika kita mencari gaji terbesar ke-3 (N = 3) dari (800, 1000, 700, 750), subkueri untuk baris ke-1SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
adalah 0. Untuk nilai gaji ke-4 (750)... WHERE Emp2.Salary > 750
adalah 2, atau N -1, maka baris ini akan dikembalikan.Gaji maksimum ketiga atau n dari tabel gaji tanpa menggunakan subquery
Untuk gaji tertinggi ke-3 taruh 2 di tempat N-1
sumber
sumber
Lihat kueri berikut untuk mendapatkan gaji tertinggi n. Dengan cara ini Anda mendapatkan gaji tertinggi nth di MYSQL. Jika Anda ingin mendapatkan gaji terendah n hanya Anda perlu mengganti DESC dengan ASC di query.
sumber
sumber
Metode 1:
Metode 2:
sumber
Pada tahun 2008 kita dapat menggunakan ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) untuk mendapatkan peringkat tanpa ikatan yang dapat kita gunakan.
Misalnya kita bisa mendapatkan nilai tertinggi ke-8 dengan cara ini, atau mengubah @N menjadi sesuatu yang lain atau menggunakannya sebagai parameter dalam suatu fungsi jika Anda mau.
Di SQL Server 2012 seperti yang Anda ketahui, ini dilakukan secara lebih intuitif menggunakan LAG ().
sumber
sumber
Ini adalah salah satu pertanyaan populer dalam wawancara SQL apa pun. Saya akan menuliskan kueri yang berbeda untuk mengetahui nilai tertinggi ke-n dari sebuah kolom.
Saya telah membuat tabel bernama "Emloyee" dengan menjalankan skrip di bawah ini.
Sekarang saya akan memasukkan 8 baris ke dalam tabel ini dengan menjalankan pernyataan insert di bawah.
Sekarang kita akan menemukan Basic_sal tertinggi ke-3 dari tabel di atas menggunakan kueri yang berbeda. Saya telah menjalankan kueri di bawah ini di studio manajemen dan di bawah ini adalah hasilnya.
Kita dapat melihat pada gambar di atas bahwa Gaji Pokok tertinggi ke-3 adalah 8500. Saya menulis 3 cara berbeda untuk melakukan hal yang sama. Dengan menjalankan ketiga query yang disebutkan di bawah ini kita akan mendapatkan hasil yang sama yaitu 8500.
Cara Pertama: - Menggunakan fungsi nomor baris
sumber
Saya menunjukkan gaji tertinggi ke-3
sumber
sumber
- gaji tertinggi ke-n
- (nth -1) gaji tertinggi
sumber
Cara yang dioptimalkan: Alih-alih subkueri, cukup gunakan batas.
Lihat sintaks batas di sini http://www.mysqltutorial.org/mysql-limit.aspx
sumber
Untuk mendapatkan nilai tertinggi ketiga dari tabel
sumber
Menurut subkueri:
sumber
Coba Query ini
Masukkan n = nilai yang Anda inginkan
sumber
sumber
Solusi yang diuji MySQL, asumsikan N = 4:
Contoh lain:
sumber
Coba kode ini: -
sumber
Gantikan n dengan gaji tertinggi ke-n sebagai angka.
sumber
Coba yang ini...
sumber
Untuk gaji tertinggi ke-2, Ubah 3 menjadi 2 dalam query di atas dan untuk gaji tertinggi ke-N ke N di mana N = 1,2,3,4 ....
sumber
PILIH * DARI (pilih Gaji berbeda dari pesanan Pelanggan berdasarkan DESC gaji) batas 4,1;
Limit 4,1 artinya tinggalkan 4 baris pertama lalu pilih baris berikutnya.
Batasan dan jumlah baris tergantung pada platform yang Anda gunakan.
Coba ini, itu akan berhasil.
sumber
CATATAN: Harap ganti OFFSET 3 di Query dengan bilangan bulat ke N APA PUN
Deskripsi
mengembalikan hanya 1 baris
kecualikan 3 catatan pertama Di sini Anda bisa mendapatkan bilangan bulat apa pun
sumber
Subkueri selalu membutuhkan lebih banyak waktu:
gunakan kueri di bawah ini untuk mendapatkan data tertinggi dan terendah:
Data Tertinggi:
select *from business order by id desc limit 3,1;
Data terendah:
select *from business order by id asc limit 3,1;
Dapat menggunakan N di tempat 3 untuk mendapatkan data ke-n.
sumber