STRING_AGG, FILTER e ROLLUP

Junte valores de um grupo em texto, conte por condição e adicione linhas de subtotal.

Sintaxe

STRING_AGG(column, separator [ORDER BY …])
aggregate(…) FILTER (WHERE condition)
GROUP BY ROLLUP (column1, column2)
  • O MySQL chama STRING_AGG de GROUP_CONCAT; o SQL Server também usa STRING_AGG.
  • ROLLUP adiciona um subtotal para cada coluna inicial e um total geral.

Exemplo

SELECT channel, COUNT(*) AS orders FROM orders GROUP BY ROLLUP (channel) ORDER BY channel;

Pedidos por canal, mais uma linha de total onde o canal é NULL.

Tabelas usadas: orders. Experimente em uma lição abaixo.

Erros comuns

  • Em um resultado de ROLLUP, um NULL na coluna agrupada pode ser uma linha de subtotal ou um NULL real. GROUPING() os diferencia.

Pratique