Udostępnij za pomocą


PERCENTILE_DISC (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Oblicza określony percentyl dla posortowanych wartości w całym zestawie wierszy lub w odrębnych partycjach zestawu wierszy w programie SQL Server. Dla danej wartości percentylu PPERCENTILE_DISC sortuje wartości wyrażeń w klauzuli ORDER BY . Następnie zwraca wartość z najmniejszą CUME_DIST wartością podaną (w odniesieniu do tej samej specyfikacji sortowania), która jest większa lub równa P. Na przykład PERCENTILE_DISC (0.5) oblicza 50. percentyl (czyli medianę) wyrażenia. PERCENTILE_DISC oblicza percentyl na podstawie dyskretnego rozkładu wartości kolumn. Wynik jest równy określonej wartości kolumny.

Transact-SQL konwencje składni

Składnia

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

Arguments

literal

Percentyl do obliczenia. Wartość musi należeć do zakresu od 0,0 do 1,0.

W OBRĘBIE GRUPY ( UPORZĄDKOWANY PRZEZ order_by_expression [ ASC | OPIS ] )

Określa listę wartości do sortowania i obliczania percentylu. Dozwolone jest tylko jedno order_by_expression . Domyślna kolejność sortowania jest rosnąca. Lista wartości może być dowolnego typu danych, które są prawidłowe dla operacji sortowania.

KONIEC ( <partition_by_clause> )

FROM Dzieli zestaw wyników klauzuli na partycje. Funkcja percentyla jest stosowana do tych partycji. Aby uzyskać więcej informacji, zobacz SELECT — OVER, klauzula. Klauzula <> ORDER BY i <wiersze lub klauzula>PERCENTILE_DISC zakresu nie mogą być określone w funkcji.

Typy zwracane

Typ zwracany jest określany przez typ order_by_expression .

Obsługa zgodności

W obszarze poziom zgodności 110 i wyższy WITHIN GROUP jest zastrzeżonym słowem kluczowym. Aby uzyskać więcej informacji, zobacz ALTER DATABASE compatibility level (Poziom zgodności ALTER DATABASE).

Uwagi

Wszystkie wartości null w zestawie danych są ignorowane.

PERCENTILE_DISC jest niedeterministyczny. Aby uzyskać więcej informacji, zobacz Funkcje deterministyczne i niedeterministyczne.

Przykłady

Podstawowy przykład składni

W poniższym przykładzie użyto PERCENTILE_CONT instrukcji i PERCENTILE_DISC do znalezienia mediany wynagrodzenia pracowników poszczególnych działów. Mogą nie zwracać tej samej wartości:

  • PERCENTILE_CONT Zwraca odpowiednią wartość, nawet jeśli nie istnieje w zestawie danych.
  • PERCENTILE_DISC zwraca rzeczywistą wartość zestawu.
USE AdventureWorks2022;
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;

Oto zestaw wyników częściowych.

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

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

Podstawowy przykład składni

W poniższym przykładzie użyto PERCENTILE_CONT instrukcji i PERCENTILE_DISC do znalezienia mediany wynagrodzenia pracowników poszczególnych działów. Mogą nie zwracać tej samej wartości:

  • PERCENTILE_CONT Zwraca odpowiednią wartość, nawet jeśli nie istnieje w zestawie danych.
  • PERCENTILE_DISC zwraca rzeczywistą wartość zestawu.
-- Uses AdventureWorks
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;

Oto zestaw wyników częściowych.

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