Conceitos
Na cláusula GROUP BY, o DB2 agrupa as linhas pelos valores nas colunas especificadas. Em seguida o DB2 trata cada grupo como uma tabela intermediária e aplica a função a esta. Este processo cria uma tabela resultado multi linhas onde cada linha contém o valor agregado de cada grupo.
A cláusula HAVING é utilizada quando se deseja que a tabela resultado inclua apenas as linhas de grupos que atendam uma seleção específica.
Sintaxe
| GROUP BY | column-name [, column-name] ... |
| [HAVING selection-condition] |
Exemplos
Delaração SELECT que calcula a média do total de faturas para cada cliente.
| SELECT | INVCUST, AVG(INVTOTAL) AS AVG_TOTAL |
| FROM PW0001.INVOICE |
|
| GROUP BY INVCUST |
Calcula a média do total de faturas por cliente para faturas maiores que 1000.
| SELECT | INVCUST, AVG(INVTOTAL) AS AVG_TOTAL |
| FROM PW0001.INVOICE |
|
| WHERE INVTOTAL > 1000 |
|
| GROUP BY INVCUST |
|
| ORDER BY AVG_TOTAL |
Declaração SELECT que produz uma tabela resultado com uma linha para cada cliente com média do total de faturas acima de 1000.
| SELECT | INVCUST, AVG(INVTOTAL) AS AVG_TOTAL |
| FROM PW0001.INVOICE |
|
| GROUP BY INVCUST |
|
| HAVING AVG(INVTOTAL) > 1000 |
|
| ORDER BY AVG_TOTAL |
Declaração SELECT que produz uma tabela resultado com uma linha para cada cliente com mais de 5 faturas acima de 1000.
| SELECT | INVCUST, AVG(INVTOTAL) AS AVG_TOTAL |
| FROM PW0001.INVOICE |
|
| WHERE INVTOTAL > 1000 |
|
| GROUP BY INVCUST |
|
| HAVING COUNT(*) > 5 |
|
| ORDER BY AVG_TOTAL |