Bagikan melalui


PERCENTILE_CONT (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Menghitung persentil berdasarkan distribusi berkelanjutan dari nilai kolom di Mesin Database SQL Server. Hasilnya diinterpolasi, dan mungkin tidak sama dengan nilai tertentu dalam kolom.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

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.

OVER ( <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.

Jenis yang dikembalikan

float(53)

Dukungan kompatibilitas

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

Keterangan

Setiap null dalam himpunan data diabaikan.

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

Contoh

Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022 database sampel, yang dapat Anda unduh dari beranda Sampel Microsoft SQL Server dan Proyek Komunitas.

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 and Analytics Platform System (PDW)

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