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

Apa Perbedaan Antara RANK dan DENSE_RANK dalam SQL?

Masalah:

Anda ingin membandingkan peringkat yang dihasilkan oleh RANK dan DENSE_RANK dan menambahkannya sebagai kolom baru ke tabel.

Contoh:

Basis data kami memiliki tabel bernama sales_assistant dengan data pada kolom berikut:id (kunci utama), first_name , last_name , month , dan sold products .

id nama_depan nama_belakang bulan produk yang terjual
1 Lisa Hitam 5 2300
2 Maria Yakub 5 2400
3 Lisa Hitam 6 2700
4 Maria Yakub 6 2700
5 Alex Smith 6 2900
6 Maria Yakub 7 1200
7 Lisa Hitam 7 1200
8 Alex Smith 7 1000

Mari kita tampilkan nama depan dan belakang setiap asisten penjualan dan jumlah produk yang terjual. Kami juga ingin memeringkatnya berdasarkan jumlah produk yang terjual dalam urutan menurun.

Solusi 1:

SELECT RANK() OVER(ORDER BY menjual produk DESC) AS r, DENSE_RANK() OVER(ORDER BY menjual produk DESC) AS dr, first_name, last_name, bulan, produk yang terjualFROM sales_assistant;

Kueri ini mengembalikan dua peringkat:satu dihasilkan oleh RANK dan satu lagi dengan DENSE_RANK . Apa bedanya?

Sederhananya, RANK melewatkan jumlah posisi setelah catatan dengan nomor peringkat yang sama. Peringkat RANK_DENSE mengembalikan nomor posisi dari 1 hingga 6 karena tidak melewatkan catatan dengan nomor peringkat yang sama:

r dr nama_depan nama_belakang bulan produk yang terjual
1 1 Alex Smith 6 2900
2 2 Lisa Hitam 6 2700
2 2 Maria Yakub 6 2700
4 3 Maria Yakub 5 2400
5 4 Lisa Hitam 5 2300
6 5 Maria Yakub 7 1200
6 5 Lisa Hitam 7 1200
8 6 Alex Smith 7 1000

Diskusi:

Jika Anda ingin memberi peringkat baris dalam kumpulan hasil, SQL menawarkan RANK() dan DENSE_RANK fungsi. Fungsi-fungsi ini digunakan di SELECT dengan kolom lainnya. Setelah RANK atau DENSE_RANK , kami memanggil OVER() fungsi, yang mengambil ORDER BY klausa dengan nama kolom yang akan diurutkan sebelum menetapkan peringkat.

Tidak seperti DENSE_RANK , RANK melompati posisi setelah peringkat yang sama. Jumlah posisi yang dilewati tergantung pada berapa banyak baris yang memiliki peringkat yang sama. Misalnya, Mary dan Lisa menjual jumlah produk yang sama dan keduanya menempati peringkat #2. Dengan RANK , posisi selanjutnya adalah #4; dengan DENSE_RANK , posisi selanjutnya adalah #3.

Keduanya RANK dan RANK_DENSE bekerja pada partisi data:

Solusi 1:

SELECT RANK() OVER(PARTITION BY month ORDER BY sold product DESC) AS r, DENSE_RANK() OVER(PARTITION BY month ORDER BY sold products DESC) AS dr, first_name, last_name, month, sold productsFROM sales_assistant; 

Anda dapat membagi catatan ke dalam grup sesuai dengan kolom yang diberikan (dalam contoh kami, month ). Dalam situasi ini, catatan diurutkan sebagai bagian dari partisi:

r dr nama_depan nama_belakang bulan produk yang terjual
1 1 Maria Yakub 5 2400
2 2 Lisa Hitam 5 2300
1 1 Alex Smith 6 2900
2 2 Lisa Hitam 6 2700
2 2 Maria Yakub 6 2700
1 1 Maria Yakub 7 1200
1 1 Lisa Hitam 7 1200
3 2 Alex Smith 7 1000

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat lingkungan pengujian dari repositori produksi

  2. Tindak lanjut dari Summer Performance Palooza 2013

  3. Fitur usang untuk dikeluarkan dari kotak peralatan Anda – Bagian 2

  4. Model Data untuk Perdagangan Saham, Dana, dan Mata Uang Kripto

  5. Memantau Sinkronisasi Replika Grup Ketersediaan