Rumah > pangkalan data > tutorial mysql > SQL RANK() lwn. ROW_NUMBER(): Bagaimanakah Mereka Berbeza Semasa Mengendalikan Hubungan?

SQL RANK() lwn. ROW_NUMBER(): Bagaimanakah Mereka Berbeza Semasa Mengendalikan Hubungan?

Susan Sarandon
Lepaskan: 2025-01-13 16:56:43
asal
896 orang telah melayarinya

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

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:

  • RANK(): Menetapkan baris dengan nilai pendua pangkat yang sama.
  • ROW_NUMBER(): Sewenang-wenangnya tetapkan kedudukan yang semakin meningkat pada baris dengan nilai pendua.

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan