Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengembalikan peringkat setiap baris dalam partisi kumpulan hasil. Peringkat baris adalah satu ditambah jumlah peringkat yang datang sebelum baris yang dimaksud.
ROW_NUMBER dan RANK serupa.
ROW_NUMBER angka semua baris secara berurutan (misalnya 1, 2, 3, 4, 5).
RANK memberikan nilai numerik yang sama untuk ikatan (misalnya 1, 2, 2, 4, 5).
Catatan
RANK adalah nilai sementara yang dihitung saat kueri dijalankan. Untuk mempertahankan angka dalam tabel, lihat IDENTITY (Properti) dan BUAT URUTAN.
Sintaks
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
Argumen
LEBIH ( [ partition_by_clause ] order_by_clause )
partition_by_clause membagi kumpulan hasil yang dihasilkan oleh FROM klausa ke dalam partisi tempat fungsi diterapkan. Jika tidak ditentukan, fungsi memperlakukan semua baris hasil kueri yang ditetapkan sebagai grup tunggal.
order_by_clause menentukan urutan data sebelum fungsi diterapkan.
Order_by_clause diperlukan. Klausa <rows or range clause> tidak OVER dapat ditentukan untuk RANK fungsi. Untuk informasi selengkapnya, lihat klausa SELECT - OVER.
Tipe pengembalian
bigint
Keterangan
Jika dua baris atau lebih mengikat untuk peringkat, setiap baris terikat menerima peringkat yang sama. Misalnya, jika dua tenaga penjualan teratas memiliki nilai yang sama SalesYTD , keduanya berada di peringkat satu. Penjual dengan peringkat tertinggi SalesYTD berikutnya adalah peringkat nomor tiga, karena ada dua baris yang memiliki peringkat lebih tinggi. Oleh karena itu, fungsi tidak RANK selalu mengembalikan bilangan bulat berurutan.
Urutan pengurutan yang digunakan untuk seluruh kueri menentukan urutan munculnya baris dalam tataan hasil.
RANK bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi deterministik dan nondeterministik.
Contoh
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
J. Peringkat baris dalam partisi
Contoh berikut memberi peringkat produk dalam inventarisi lokasi inventaris yang ditentukan sesuai dengan jumlahnya. Kumpulan hasil dipartisi oleh LocationID dan secara logis diurutkan oleh Quantity. Di lokasi 3, produk 494 dan 495 memiliki jumlah yang sama. Karena mereka seri, mereka berdua berada di peringkat satu.
USE AdventureWorks2025;
GO
SELECT i.ProductID,
p.Name,
i.LocationID,
i.Quantity,
RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank
FROM Production.ProductInventory AS i
INNER JOIN Production.Product AS p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
Berikut set hasilnya.
ProductID Name LocationID Quantity Rank
----------- ---------------------- ------------ -------- ----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
B. Memberi peringkat semua baris dalam kumpulan hasil
Contoh berikut mengembalikan 10 karyawan teratas yang diberi peringkat berdasarkan gaji mereka. Karena PARTITION BY klausa tidak ditentukan, fungsi diterapkan RANK ke semua baris dalam kumpulan hasil.
USE AdventureWorks2025;
GO
SELECT TOP (10) BusinessEntityID,
Rate,
RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory AS eph1
WHERE RateChangeDate = (
SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS eph2
WHERE eph1.BusinessEntityID = eph2.BusinessEntityID
)
ORDER BY BusinessEntityID;
Berikut set hasilnya.
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
2 63.4615 4
3 43.2692 11
4 29.8462 28
5 32.6923 22
6 32.6923 22
7 50.4808 6
8 40.8654 14
9 40.8654 14
10 42.4808 13
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
C: Baris peringkat dalam partisi
Contoh berikut memberi peringkat perwakilan penjualan di setiap wilayah penjualan sesuai dengan total penjualan mereka. Himpunan baris dipartisi berdasarkan SalesTerritoryGroup dan diurutkan menurut SalesAmountQuota.
-- Uses AdventureWorks
SELECT e.LastName,
st.SalesTerritoryGroup,
SUM(sq.SalesAmountQuota) AS TotalSales,
RANK() OVER (PARTITION BY st.SalesTerritoryGroup ORDER BY SUM(sq.SalesAmountQuota) DESC) AS RankResult
FROM dbo.DimEmployee AS e
INNER JOIN dbo.FactSalesQuota AS sq
ON e.EmployeeKey = sq.EmployeeKey
INNER JOIN dbo.DimSalesTerritory AS st
ON e.SalesTerritoryKey = st.SalesTerritoryKey
WHERE e.SalesPersonFlag = 1
AND st.SalesTerritoryGroup <> N'NA'
GROUP BY e.LastName, st.SalesTerritoryGroup;
Berikut set hasilnya.
LastName SalesTerritoryGroup TotalSales RankResult
------------------ -------------------- ------------ -----------
Pak Europe 10514000.00 1
Varkey Chudukatil Europe 5557000.00 2
Valdez Europe 2287000.00 3
Carson North America 12198000.00 1
Mitchell North America 11786000.00 2
Blythe North America 11162000.00 3
Reiter North America 8541000.00 4
Ito North America 7804000.00 5
Saraiva North America 7098000.00 6
Vargas North America 4365000.00 7
Campbell North America 4025000.00 8
Ansman-Wolfe North America 3551000.00 9
Mensa-Annan North America 2753000.00 10
Tsoflias Pacific 1687000.00 1