Operações OLAP: GROUPING SETS

Tomada de decisão orientada por dados em SQL

Irene Ortner

Data Scientist at Applied Statistics

Visão geral dos operadores OLAP em SQL

Extensões em SQL para facilitar operações OLAP

  • GROUP BY CUBE
  • GROUP BY ROLLUP
  • GROUP BY GROUPING SETS
Tomada de decisão orientada por dados em SQL

Tabela renting_extended

As primeiras linhas da tabela renting_extended:

| renting_id | country  | genre  | rating |
|------------|----------|--------|--------|
| 2          | Belgium  | Drama  | 10     |
| 32         | Belgium  | Drama  | 10     |
| 203        | Austria  | Drama  | 6      |
| 292        | Austria  | Comedy | 8      |
| 363        | Belgium  | Drama  | 7      |
| .......... | ........ | ...... | ...... |
Tomada de decisão orientada por dados em SQL

GROUP BY GROUPING SETS

Exemplo de consulta com o operador GROUPING SETS:

SELECT country, 
       genre, 
       COUNT(*)
FROM rentings_extended
GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
  • Nomes de colunas entre parênteses indicam um nível de agregação.
  • GROUP BY GROUPING SETS retorna um UNION de várias consultas GROUP BY.
Tomada de decisão orientada por dados em SQL

GROUPING SETS e consultas GROUP BY

SELECT country, 
       genre, 
       COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (country, genre);
  • Conta os aluguéis para cada combinação única de país e gênero.
  • Expressão em GROUPING SETS: (country, genre)
SELECT country, 
       genre, 
       COUNT(*)
FROM renting_extended
GROUP BY country, genre;
| country | genre  | count  |
|---------|--------|--------|
| Austria | Comedy | 2      |
| Belgium | Drama  | 15     |
| Austria | Drama  | 4      |
| Belgium | Comedy | 1      |
Tomada de decisão orientada por dados em SQL

GROUPING SETS e consultas GROUP BY

SELECT country, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (country);
  • Conta os aluguéis por país.
  • Expressão em GROUPING SETS: (country)
SELECT country, COUNT(*)
FROM renting_extended
GROUP BY country;
| country | count |
|---------|-------|
| Austria | 16    |
| Belgium | 6     |
Tomada de decisão orientada por dados em SQL

GROUPING SETS e consultas GROUP BY

SELECT genre, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (genre);
  • Conta os aluguéis por gênero.
  • Expressão em GROUPING SETS: (genre)
SELECT genre, COUNT(*)
FROM renting_extended
GROUP BY genre;
| country | count |
|---------|-------|
| Comedy  | 3     |
| Drama   | 19    |
Tomada de decisão orientada por dados em SQL

GROUPING SETS e consultas GROUP BY

SELECT COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS ();
  • Agregação total: conta todos os aluguéis.
  • Expressão em GROUPING SETS: ()
SELECT COUNT(*)
FROM renting_extended;
| count |
|-------|
| 22    |
Tomada de decisão orientada por dados em SQL

Notação de GROUP BY GROUPING SETS

  • GROUP BY GROUPING SETS (...)
    SELECT country, genre, COUNT(*)
    FROM renting_extended
    GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
    
  • UNION das 4 consultas anteriores.
  • Reúne tudo que uma tabela dinâmica mostraria em uma consulta.
  • Equivalente a GROUP BY CUBE (country, genre).
Tomada de decisão orientada por dados em SQL

Resultado com o operador GROUPING SETS

SELECT country, genre, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
| country | genre  |count|
|---------|--------|-----|
| NULL    | NULL   | 22  |
| Austria | Comedy | 2   |
| Belgium | Drama  | 15  |
| Austria | Drama  | 4   |
| Belgium | Comedy | 1   |
| Belgium | NULL   | 16  |
| Austria | NULL   | 6   |
| NULL    | Comedy | 3   |
| NULL    | Drama  | 19  |
Tomada de decisão orientada por dados em SQL

Calcular número de aluguéis e nota média

  • Combine só agregações selecionadas:
    • país e gênero
    • gênero
  • Use quantidade de aluguéis e média de notas.
    SELECT country, 
         genre, 
         COUNT(*), 
         AVG(rating) AS avg_rating
    FROM renting_extended
    GROUP BY GROUPING SETS ((country, genre), (genre));
    
Tomada de decisão orientada por dados em SQL

Calcular número de aluguéis e nota média

SELECT country, genre, COUNT(*), AVG(rating) AS avg_rating
FROM renting_extended
GROUP BY GROUPING SETS ((country, genre), (genre));
| country | genre  | count| avg_rating |
|---------|--------|------|------------|
| Austria | Comedy | 2    | 8.00       |
| Belgium | Drama  | 15   | 9.17       |
| Austria | Drama  | 4    | 6.00       |
| Belgium | Comedy | 1    | NULL       |
| NULL    | Comedy | 3    | 8.00       |
| NULL    | Drama  | 19   | 8.38       |
Tomada de decisão orientada por dados em SQL

Vamos praticar!

Tomada de decisão orientada por dados em SQL

Preparing Video For Download...