Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL RANK() versus ROW_NUMBER()

Anda hanya akan melihat perbedaannya jika Anda memiliki ikatan dalam partisi untuk nilai pemesanan tertentu.

RANK dan DENSE_RANK deterministik dalam hal ini, semua baris dengan nilai yang sama untuk kolom pengurutan dan partisi akan mendapatkan hasil yang sama, sedangkan ROW_NUMBER akan secara sewenang-wenang (non deterministik) memberikan hasil yang bertambah ke baris yang diikat.

Contoh: (Semua baris memiliki StyleID yang sama begitu juga di partisi yang sama dan di dalam partisi itu 3 baris pertama diikat ketika dipesan oleh ID )

WITH T(StyleID, ID)
     AS (SELECT 1,1 UNION ALL
         SELECT 1,1 UNION ALL
         SELECT 1,1 UNION ALL
         SELECT 1,2)
SELECT *,
       RANK() OVER(PARTITION BY StyleID ORDER BY ID)       AS 'RANK',
       ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS 'ROW_NUMBER',
       DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'DENSE_RANK'
FROM   T  

Kembali

StyleID     ID       RANK      ROW_NUMBER      DENSE_RANK
----------- -------- --------- --------------- ----------
1           1        1         1               1
1           1        1         2               1
1           1        1         3               1
1           2        4         4               2

Anda dapat melihat bahwa untuk tiga baris identik ROW_NUMBER peningkatan, RANK nilainya tetap sama kemudian melompat ke 4 . DENSE_RANK juga memberikan peringkat yang sama untuk ketiga baris tetapi kemudian nilai berbeda berikutnya diberi nilai 2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara char, nchar, varchar, dan nvarchar di SQL Server?

  2. Gunakan FILEGROUP_NAME() untuk Mengembalikan Nama Filegroup di SQL Server

  3. Tidak dapat menggunakan predikat CONTAINS atau FREETEXT pada tabel atau tampilan terindeks karena tidak diindeks teks lengkap

  4. SQL Server IF vs IIF():Apa Bedanya?

  5. Operasi SQL Server CRUD