Com o lançamento do Oracle Database 23ai (versão 23.9), foi introduzido o recurso
GROUP BY ALL, que simplifica às consultas SQL com agregações.Por que ainda listar todas as colunas?
Tradicionalmente, ao usar GROUP BY, era obrigatório listar todas as colunas não-agrupadas presentes no SELECT. Imagine queries longas com muitas colunas — além de trabalhoso, aumenta a chance algum erro de sintaxe, especialmente quando o SELECT evolui em versões subsequentes.
Como fica a partir da versão 23.9?
A nova sintaxe permite que o otimizador do Oracle substitua internamente
ALL pelas colunas não-agrupadas, poupando trabalho manual. "Por trás dos panos" o otimizador transforma a cláusula para incluir automaticamente as colunas que deveriam ser agrupadas.Principais vantagens
| Benefício | Descrição |
|---|---|
| Menos repetição | Não é mais preciso digitar todas as colunas manualmente. |
| Código mais legível | Consultas ficam mais limpas e fáceis de ler. |
| Manutenção facilitada | Mudanças no SELECT não exigem revisitar o GROUP BY. |
| Comportamento previsível | A transformação realizada pelo otimizador é clara e transparente. |
Exemplo com a forma tradicional
SQL> SQL> col owner for a25 SELECT owner, object_type, status, COUNT(*) FROM all_objects where rownum < 200 GROUP BY owner, object_type, status;SQL> 2 3 4 OWNER OBJECT_TYPE STATUS COUNT(*) ------------------------- ----------------------- ------- ---------- SYS INDEX VALID 103 SYS TABLE VALID 78 SYS CLUSTER VALID 6 SYS SEQUENCE VALID 3 SYS LOB VALID 7 SYS EDITION VALID 1 PUBLIC SYNONYM VALID 1 7 rows selected. SQL>
- A cláusula
GROUP BYcontém explicitamente todas as colunas não agregadas doSELECT(owner,object_type,status). - Para cada combinação única dessas colunas, o Oracle conta (
COUNT(*)) quantos registros existem.
Exemplo com nova funcionalidade
SQL> SQL> col owner for a25 SELECT owner, object_type, status, COUNT(*) FROM all_objects where rownum < 200 GROUP BY ALL;SQL> 2 3 4 OWNER OBJECT_TYPE STATUS COUNT(*) ------------------------- ----------------------- ------- ---------- SYS INDEX VALID 103 SYS TABLE VALID 78 SYS CLUSTER VALID 6 SYS SEQUENCE VALID 3 SYS LOB VALID 7 SYS EDITION VALID 1 PUBLIC SYNONYM VALID 1 7 rows selected. SQL>
- O GROUP BY ALL diz ao otimizador: “agrupa por todas as colunas não agregadas do SELECT”.
- Internamente, o Oracle reescreve a consulta para: GROUP BY owner, object_type, status. Sem você precisar digitar essa lista.
Comentários
Postar um comentário