sql >> Database >  >> RDS >> Oracle

Groeperen en tellen

U kunt het volgende gebruiken:

SELECT  Team, TotalWins, FirstWin, LastWin
FROM    (   SELECT  Team, 
                    WL,
                    COUNT(*) TotalWins,
                    MIN("Date") FirstWin,
                    MAX("Date") LastWin,
                    ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY COUNT(*) DESC) RowNumber
            FROM    (   SELECT  Team,
                                "Date",
                                WL, 
                                ROW_NUMBER() OVER(PARTITION BY Team ORDER BY "Date") - ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY "Date") Grouping
                        FROM    T
                    ) GroupedData
            WHERE   WL = 'W'
            GROUP BY Team, WL, Grouping
        ) RankedData
WHERE   RowNumber = 1;

Het gebruikt ROW_NUMBER om elk spel te rangschikken per team, en ook per resultaat, het verschil tussen deze twee is uniek voor elke groep opeenvolgende resultaten. Dus voor je eerste team zou je hebben:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
Team_1  07/01/0012  L   3       1   2
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
Team_1  30/01/0012  L   6       2   4
Team_1  14/02/0012  W   7       5   2
Team_1  17/02/0012  L   8       3   5
Team_1  20/02/0012  W   9       6   3

Waarbij RN1 alleen per team is gepartitioneerd en rn2 per team en resultaat is gepartitioneerd.

Zoals u kunt zien, als u de verliezen verwijdert, wordt de DIFF-kolom met één verhoogd voor elke groep opeenvolgende overwinningen:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
---------------------------------------
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
---------------------------------------
Team_1  14/02/0012  W   7       5   2
---------------------------------------
Team_1  20/02/0012  W   9       6   3

Je kunt dan groeperen op deze manier om ervoor te zorgen dat je naar opeenvolgende overwinningen kijkt, en tel om het meeste te krijgen. Ik heb toen net een ander rijnummer gebruikt om de maximale opeenvolgende overwinningen per team te behalen.

Voorbeeld op SQL Fiddle




  1. MySQL-subquery - MySQL 3.23

  2. Tabelnaam doorgeven als parameter in psycopg2

  3. Mijnbouwplannen:niet alleen voor de plancache

  4. Microsoft Azure:wat het is en hoe uw bedrijf hiervan kan profiteren