CUME_DIST (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysendpoint i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

För SQL Server beräknar denna funktion den kumulativa fördelningen av ett värde inom en grupp av värden. Med andra ord beräknar CUME_DIST den relativa positionen för ett angivet värde i en grupp av värden. Under antagandet av stigande ordning definieras värdet CUME_DIST av ett värde i rad r som antalet rader med värden mindre än eller lika med det värdet i rad r, dividerat med antalet rader som utvärderas i partitionen eller frågeresultatuppsättningen. CUME_DIST liknar PERCENT_RANK funktionen.

Transact-SQL syntaxkonventioner

Syntax

CUME_DIST( )  
    OVER ( [ partition_by_clause ] order_by_clause )  

Arguments

ÖVER ( [ partition_by_clause ] order_by_clause)

partition_by_clause delar in FROM-klausulens resultatmängd i partitioner, där funktionen tillämpas. Om argumentet partition_by_clause inte specificeras, CUME_DIST behandlas alla rader i frågeresultatuppsättningen som en enda grupp. order_by_clause bestämmer den logiska ordningen i vilken operationen sker. CUME_DIST kräver order_by_clause. CUME_DIST accepterar inte <rader- eller intervallklausulen> i OVER-syntaxen. Mer information finns i OVER-satsen (Transact-SQL).

Returtyper

float(53)

Anmärkningar

CUME_DIST returnerar ett värdeintervall större än 0 och mindre än eller lika med 1. Uavgjorta värden utvärderas alltid till samma kumulativa fördelningsvärde. CUME_DIST inkluderar NULL-värden som standard och behandlar dessa värden som de lägsta möjliga värdena.

CUME_DIST är icke-terministisk. Mer information finns i Deterministiska och nondeterministiska funktioner.

Examples

Detta exempel använder funktionen CUME_DIST för att beräkna lönepercentilen för varje anställd inom en given avdelning. CUME_DIST Returnerar ett värde som representerar andelen anställda med en lön som är lägre eller lika med den nuvarande anställde i samma avdelning. Funktionen PERCENT_RANK beräknar den procentuella rangordningen av den anställdes lön inom en avdelning. För att dela upp resultatmängdens rader efter avdelning specificerar exemplet värdet partition_by_clause . ORDER BY-klausulen i OVER-klausulen ordnar logiskt raderna i varje partition. ORDER BY-klausulen i SELECT-satsen bestämmer visningsordningen för resultatmängden.

USE AdventureWorks2022;  
GO  
SELECT Department, LastName, Rate,   
       CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist,   
       PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank  
FROM HumanResources.vEmployeeDepartmentHistory AS edh  
    INNER JOIN HumanResources.EmployeePayHistory AS e    
    ON e.BusinessEntityID = edh.BusinessEntityID  
WHERE Department IN (N'Information Services',N'Document Control')   
ORDER BY Department, Rate DESC;  

Här är resultatet.

Department             LastName               Rate                  CumeDist               PctRank  
---------------------- ---------------------- --------------------- ---------------------- ----------------------  
Document Control       Arifin                 17.7885               1                      1  
Document Control       Norred                 16.8269               0.8                    0.5  
Document Control       Kharatishvili          16.8269               0.8                    0.5  
Document Control       Chai                   10.25                 0.4                    0  
Document Control       Berge                  10.25                 0.4                    0  
Information Services   Trenary                50.4808               1                      1  
Information Services   Conroy                 39.6635               0.9                    0.888888888888889  
Information Services   Ajenstat               38.4615               0.8                    0.666666666666667  
Information Services   Wilson                 38.4615               0.8                    0.666666666666667  
Information Services   Sharma                 32.4519               0.6                    0.444444444444444  
Information Services   Connelly               32.4519               0.6                    0.444444444444444  
Information Services   Berg                   27.4038               0.4                    0  
Information Services   Meyyappan              27.4038               0.4                    0  
Information Services   Bacon                  27.4038               0.4                    0  
Information Services   Bueno                  27.4038               0.4                    0  
(15 row(s) affected)  

Se även

PERCENT_RANK (Transact-SQL)