Funkcja SQL Server CUME_DIST. Jak prawidłowo korzystać z funkcji?

Funkcja MSSQL CUME_DIST. Jak obliczyć decyle i percentyle?

Funkcja CUME_DIST w SQL Server jest używana do obliczania wartości współczynnika dystrybucji kumulatywnej.

  • Jej wynik zaokrąglony do dwóch miejsc po przecinku określa percentyl.
  • Zaokrąglony do jednego miejsca po przecinku określa decyl.

Jest to funkcja agregująca, która zwraca wartość współczynnika dystrybucji kumulatywnej dla każdego wiersza w zestawie wyników. Współczynnik dystrybucji kumulatywnej jest to współczynnik, który określa, jaki procent wierszy ma wartość mniejszą lub równą danej wartości.

Składnia funkcji CUME_DIST w SQL Server jest następująca:

CUME_DIST ( ) OVER ( [ partition_by_clause ] order_by_clause )

Funkcja CUME_DIST wymaga podania argumentu OVER, który określa, jak wyniki mają być grupowane i sortowane. Argument OVER może zawierać klauzulę PARTITION BY, która określa, jak wyniki mają być grupowane, oraz klauzulę ORDER BY, która określa, jak wyniki mają być sortowane.

Aby lepiej zrozumieć, jak funkcja CUME_DIST działa, przyjrzyjmy się przykładowi. Załóżmy, że mamy tabelę zawierającą dane dotyczące wynagrodzeń pracowników. Chcemy obliczyć współczynnik dystrybucji kumulatywnej dla każdego wiersza. Aby to zrobić, użyjemy następującego zapytania:

SELECT 
EmployeeName, 
Salary, 
CUME_DIST() OVER (ORDER BY Salary) AS CumulativeDistribution 
FROM EmployeeSalaries
;

Wynikiem tego zapytania będzie tabela zawierająca imię i nazwisko pracownika, jego wynagrodzenie i współczynnik dystrybucji kumulatywnej. Współczynnik dystrybucji kumulatywnej dla każdego wiersza będzie określał, jaki procent wierszy ma wartość mniejszą lub równą danej wartości.

Przykład na bazie AdventureWorks:


SELECT
p.[Name],
-- s.[LineTotal],
CUME_DIST() OVER (PARTITION BY [SalesOrderID] ORDER BY s.[LineTotal]) AS CumulativeDistribution
FROM [AdventureWorks2016_EXT].[Sales].[SalesOrderDetail] s
left join [Production].[Product] p on s.productid = p.productid
;

SQL Server percentyle i decyle

Leave a comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

%d bloggers like this: