Statistiques récapitulatives et fonctions de fenêtrage PostgreSQL
Michel Semaan
Data Scientist
Médailles chinoises et russes aux Jeux olympiques d'été de 2008 par catégorie de médailles
| Country | Medal | Awards |
|---------|--------|--------|
| CHN | Bronze | 57 |
| CHN | Gold | 74 |
| CHN | Silver | 53 |
| CHN | Total | 184 |
| RUS | Bronze | 56 |
| RUS | Gold | 43 |
| RUS | Silver | 44 |
| RUS | Total | 143 |
SELECT Country, Medal, COUNT(*) AS Awards FROM Summer_Medals WHERE Year = 2008 AND Country IN ('CHN', 'RUS') GROUP BY Country, Medal ORDER BY Country ASC, Medal ASCUNION ALL SELECT Country, 'Total', COUNT(*) AS Awards FROM Summer_Medals WHERE Year = 2008 AND Country IN ('CHN', 'RUS') GROUP BY Country, 2 ORDER BY Country ASC;
SELECT
Country, Medal, COUNT(*) AS Awards
FROM Summer_Medals
WHERE
Year = 2008 AND Country IN ('CHN', 'RUS')
GROUP BY Country, ROLLUP(Medal)
ORDER BY Country ASC, Medal ASC;
ROLLUP est une sous-clause GROUP BY qui inclut des lignes supplémentaires pour les agrégations au niveau du groupeGROUP BY Country, ROLLUP(Medal) comptera tous les totaux au niveau Country et Medal, puis ne comptera que les totaux au niveau Country et remplira Medal avec les valeurs nullpour ces lignesSELECT
Country, Medal, COUNT(*) AS Awards
FROM summer_medals
WHERE
Year = 2008 AND Country IN ('CHN', 'RUS')
GROUP BY ROLLUP(Country, Medal)
ORDER BY Country ASC, Medal ASC;
ROLLUP est hiérarchique, désagrégé de la colonne la plus à gauche vers la colonne la plus à droiteROLLUP(Country, Medal) inclut les totaux au niveau CountryROLLUP(Medal, Country) inclut les totaux au niveau Medal| Country | Medal | Awards |
|---------|--------|--------|
| CHN | Bronze | 57 |
| CHN | Gold | 74 |
| CHN | Silver | 53 |
| CHN | null | 184 |
| RUS | Bronze | 56 |
| RUS | Gold | 43 |
| RUS | Silver | 44 |
| RUS | null | 143 |
| null | null | 327 |
nulls ; la ligne contenant toutes les valeurs null correspond au total généralMedal n'ont pas été inclus, car il s'agit de ROLLUP(Country, Medal) et non de ROLLUP(Medal, Country)SELECT
Country, Medal, COUNT(*) AS Awards
FROM summer_medals
WHERE
Year = 2008 AND Country IN ('CHN', 'RUS')
GROUP BY CUBE(Country, Medal)
ORDER BY Country ASC, Medal ASC;
CUBE est un ROLLUP non hiérarchiqueCUBE(Country, Medal) génère des agrégations pour chaque Country, pour chaque type de Medal, ainsi qu’un total général| Country | Medal | Awards |
|---------|--------|--------|
| CHN | Bronze | 57 |
| CHN | Gold | 74 |
| CHN | Silver | 53 |
| CHN | null | 184 |
| RUS | Bronze | 56 |
| RUS | Gold | 43 |
| RUS | Silver | 44 |
| RUS | null | 143 |
| null | Bronze | 113 |
| null | Gold | 117 |
| null | Silver | 97 |
| null | null | 327 |
Medal sont inclusSource
| Year | Quarter | Sales |
|------|---------|-------|
| 2008 | Q1 | 12 |
| 2008 | Q2 | 15 |
| 2009 | Q1 | 21 |
| 2009 | Q2 | 27 |
ROLLUP si les données sont hiérarchiques (ex. : date) et si vous ne voulez pas toutes les agrégations au niveau groupeCUBE si vous voulez toutes les agrégations au niveau groupeROLLUP(Year, Quarter)
| Year | Quarter | Sales |
|------|---------|-------|
| 2008 | null | 27 |
| 2009 | null | 48 |
| null | null | 75 |
CUBE(Year, Quarter)
Lignes au-dessus + les suivantes
| Year | Quarter | Sales |
|------|---------|-------|
| null | Q1 | 33 |
| null | Q2 | 42 |
Statistiques récapitulatives et fonctions de fenêtrage PostgreSQL