PERCENTILE_CONT (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsTitik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Fungsi ini PERCENTILE_CONT menghitung persentil berdasarkan distribusi kontinu nilai kolom di Mesin Database SQL Server. Hasilnya diinterpolasi, dan mungkin tidak sama dengan nilai tertentu dalam kolom.

Konvensi sintaks transact-SQL

Sintaks

Sintaks fungsi agregasi:

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )

Sintaks fungsi analitik:

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] 
    [ OVER ( [ <partition_by_clause> ] ) ]
    )
    OVER ( [ <partition_by_clause> ] )

Argumen

numeric_literal

Persentil untuk dihitung. Nilai harus berkisar antara 0.0 dan 1.0.

DALAM GRUP ( PESAN MENURUT order_by_expression )

Menentukan daftar nilai numerik untuk mengurutkan dan menghitung persentil. Hanya satu order_by_expression yang diizinkan. Ekspresi harus mengevaluasi ke jenis numerik yang tepat atau perkiraan, tanpa jenis data lain yang diizinkan. Jenis numerik yang tepat adalah int, bigint, smallint, tinyint, numeric, bit, desimal, smallmoney, dan uang. Perkiraan jenis numerik adalah float dan nyata. Urutan sortir default adalah menaik.

LEBIH ( <partition_by_clause> )

Membagi tataan hasil yang dihasilkan oleh FROM klausul menjadi partisi tempat fungsi persentil diterapkan. Untuk informasi selengkapnya, lihat SELECT - OVER Clause. Klausa ORDER BY dan <rows or range clause>OVER sintaks tidak dapat ditentukan dalam PERCENTILE_CONT fungsi.

Note

Klausa ini OVER bersifat opsional di Fabric Data Warehouse dan endpoint SQL analytics. PERCENTILE_CONT dapat digunakan dalam bentuk agregat atau analitik (jendela).

Jenis yang dikembalikan

float(53)

Dukungan kompatibilitas

WITHIN GROUP adalah kata kunci yang dipesan, dimulai dengan tingkat 110kompatibilitas . Untuk informasi selengkapnya, lihat ALTER DATABASE Tingkat Kompatibilitas.

Keterangan

Bentuk agregat dari PERCENTILE_CONT, yang menghilangkan klausa tersebutOVER, tidak didukung di SQL Server, Azure SQL Database, Azure SQL Managed Instance, atau SQL database di Fabric.

Setiap null dalam himpunan data diabaikan.

PERCENTILE_CONT bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi Deterministik dan Nondeterministik.

Contoh

Contoh kode dalam artikel ini menggunakan AdventureWorks2025database , AdventureWorksDW2025, atau AdventureWorksLT2025 contoh, yang dapat Anda unduh dari repositori GitHub Azure Data SQL Samples Repository.

J. Menemukan gaji karyawan median per departemen

Contoh berikut menggunakan PERCENTILE_CONT dan PERCENTILE_DISC untuk menemukan gaji karyawan median di setiap departemen. Fungsi-fungsi ini mungkin tidak mengembalikan nilai yang sama. PERCENTILE_CONT menginterpolasi nilai yang sesuai, yang mungkin atau mungkin tidak ada dalam himpunan data, sementara PERCENTILE_DISC selalu mengembalikan nilai aktual dari set.

USE AdventureWorks2022;
GO

SELECT DISTINCT Name AS DepartmentName,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate)
        OVER (PARTITION BY Name) AS MedianCont,
    PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate)
        OVER (PARTITION BY Name) AS MedianDisc
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh
    ON dh.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.EmployeePayHistory AS ph
    ON ph.BusinessEntityID = dh.BusinessEntityID
WHERE dh.EndDate IS NULL;

Berikut adalah hasil parsial yang ditetapkan.

DepartmentName        MedianCont    MedianDisc
--------------------   ----------   ----------
Document Control       16.8269      16.8269
Engineering            34.375       32.6923
Executive              54.32695     48.5577
Human Resources        17.427850    16.5865

Contoh: Azure Synapse Analytics

Contoh berikut menggunakan AdventureWorksDW2012 database sampel.

B. Menemukan gaji karyawan median per departemen

Contoh berikut menggunakan PERCENTILE_CONT dan PERCENTILE_DISC untuk menemukan gaji karyawan median di setiap departemen. Fungsi-fungsi ini mungkin tidak mengembalikan nilai yang sama. PERCENTILE_CONT menginterpolasi nilai yang sesuai, yang mungkin atau mungkin tidak ada dalam himpunan data, sementara PERCENTILE_DISC selalu mengembalikan nilai aktual dari set.

SELECT DISTINCT DepartmentName,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate)
        OVER (PARTITION BY DepartmentName) AS MedianCont,
    PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate)
        OVER (PARTITION BY DepartmentName) AS MedianDisc
FROM dbo.DimEmployee;

Berikut adalah hasil parsial yang ditetapkan.

DepartmentName        MedianCont    MedianDisc
--------------------   ----------   ----------
Document Control       16.826900    16.8269
Engineering            34.375000    32.6923
Human Resources        17.427850    16.5865
Shipping and Receiving 9.250000      9.0000