ROLLUP ve CUBE

PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

Michel Semaan

Data Scientist

Grup düzeyi toplamlar

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    |
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

Eski yöntem

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 ASC

UNION 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;
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

ROLLUP ile tanışın

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ümlesidir
  • GROUP 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 doldurur
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

ROLLUP - Sorgu

SELECT
  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ır
    • ROLLUP(Country, Medal), Country düzeyi toplamları içerir
    • ROLLUP(Medal, Country), Medal düzeyi toplamları içerir
    • Her ikisi de genel toplamları içerir
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

ROLLUP - Sonuç

| 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    |
  • Grup düzeyi toplamlar null içerir; tümü null olan satır genel toptamdır
  • ROLLUP(Country, Medal) olduğu için Medal düzeyi toplamlar dahil edilmemiştir; ROLLUP(Medal, Country) olsaydı dahil edilirdi
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

CUBE ile tanışın

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, hiyerarşik olmayan bir ROLLUPtır
  • Tüm olası grup düzeyi toplamlarını üretir
    • CUBE(Country, Medal), Country düzeyi, Medal düzeyi ve genel toplamları sayar
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

CUBE - Sonuç

| 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 ediniz
PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

ROLLUP vs CUBE

Kaynak

| Year | Quarter | Sales |
|------|---------|-------|
| 2008 | Q1      | 12    |
| 2008 | Q2      | 15    |
| 2009 | Q1      | 21    |
| 2009 | Q2      | 27    |
  • Hiyerarşik veriniz varsa (örn. tarih parçaları) ve tüm olası grup düzeyi toplamları istemiyorsanız ROLLUP kullanınız
  • Tüm olası grup düzeyi toplamları istiyorsanız CUBE kullanınız

ROLLUP(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ı

Hadi pratik yapalım!

PostgreSQL Özet İstatistikler ve Pencere Fonksiyonları

Preparing Video For Download...