SQL RANK() dan ROW_NUMBER(): penjelasan terperinci tentang perbezaan
Dalam SQL, RANK() dan ROW_NUMBER() mempunyai fungsi yang serupa dan mudah dikelirukan. Walau bagaimanapun, memahami perbezaan halus mereka adalah penting untuk manipulasi data yang berkesan.
Perbandingan RANK() dan ROW_NUMBER()
RANK() memberikan kedudukan yang sama kepada baris dan lajur dengan nilai isihan yang sama dalam partition, manakala ROW_NUMBER() sentiasa meningkat, walaupun untuk baris dan lajur dengan nilai yang sama.
Perbezaan Utama: Mengendalikan Nilai Pendua
Perbezaan utama antara RANK() dan ROW_NUMBER() ialah tingkah laku mereka apabila menemui nilai pendua dalam partition:
Contoh
Pertimbangkan borang berikut:
StyleID | ID | Description |
---|---|---|
1 | 1 | Item A |
1 | 1 | Item B |
1 | 1 | Item C |
1 | 2 | Item D |
Gunakan pertanyaan berikut:
<code class="language-sql">SELECT ID, Description, RANK() OVER (PARTITION BY StyleID ORDER BY ID) AS 'Rank' FROM SubStyle; SELECT ID, Description, ROW_NUMBER() OVER (PARTITION BY StyleID ORDER BY ID) AS 'RowNumber' FROM SubStyle;</code>
Hasil yang sama hanya boleh diperoleh jika tiada nilai pendua dalam partition. Contohnya, jika anda menambah baris lain dengan StyleID 3 dan ID 1, anda akan melihat perkara berikut:
StyleID | ID | Description | Rank | RowNumber |
---|---|---|---|---|
1 | 1 | Item A | 1 | 1 |
1 | 1 | Item B | 1 | 2 |
1 | 1 | Item C | 1 | 3 |
1 | 2 | Item D | 4 | 4 |
3 | 1 | New Item | 1 | 5 |
Seperti yang anda boleh lihat, untuk nilai unik dengan StyleID sebanyak 3, ROW_NUMBER() memberikan nombor yang semakin meningkat, manakala RANK() memberikannya kedudukan yang sama dengan baris dengan nilai pendua StyleID sebanyak 1.
Kesimpulan
RANK() dan ROW_NUMBER() mempunyai tujuan yang berbeza. RANK() digunakan untuk menyusun nilai unik dalam kumpulan, mengendalikan nilai pendua dengan sewajarnya. ROW_NUMBER(), sebaliknya, sentiasa meningkat, memastikan setiap baris mempunyai nilai angka yang berbeza, walaupun untuk baris dengan nilai pendua. Memahami perbezaan ini adalah penting untuk membuat keputusan termaklum apabila bekerja dengan data SQL.
Atas ialah kandungan terperinci SQL RANK() lwn. ROW_NUMBER(): Bagaimanakah Mereka Berbeza Semasa Mengendalikan Hubungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!