PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları
Michel Semaan
Data Scientist
2008 Yaz Olimpiyatları'nda Çin ve Rusya madalyaları, madalya sınıfına göre
| 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, grup düzeyi toplamlar için ek satırlar içeren bir GROUP BY alt cümlesidirGROUP BY Country, ROLLUP(Medal) önce tüm Country ve Medal düzeyi toplamları sayar, sonra yalnızca Country düzeyi toplamları sayar ve bu satırlarda Medal alanını null ile doldururSELECT
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 hiyerarşiktir; soldaki sütundan sağdakine doğru ayrıştırırROLLUP(Country, Medal), Country düzeyi toplamları içerirROLLUP(Medal, Country), Medal düzeyi toplamları içerir| 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 |
null içerir; tümü null olan satır genel toptamdırROLLUP(Country, Medal) olduğu için Medal düzeyi toplamlar dahil edilmemiştir; ROLLUP(Medal, Country) olsaydı dahil edilirdiSELECT
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, hiyerarşik olmayan bir ROLLUPtırCUBE(Country, Medal), Country düzeyi, Medal düzeyi ve genel toplamları sayar| 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 düzeyi toplamların dahil edildiğine dikkat edinizKaynak
| Year | Quarter | Sales |
|------|---------|-------|
| 2008 | Q1 | 12 |
| 2008 | Q2 | 15 |
| 2009 | Q1 | 21 |
| 2009 | Q2 | 27 |
ROLLUP kullanınızCUBE kullanınızROLLUP(Year, Quarter)
| Year | Quarter | Sales |
|------|---------|-------|
| 2008 | null | 27 |
| 2009 | null | 48 |
| null | null | 75 |
CUBE(Year, Quarter)
Yukarıdaki satırlar + aşağıdakiler
| Year | Quarter | Sales |
|------|---------|-------|
| null | Q1 | 33 |
| null | Q2 | 42 |
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları