DB2 - Banco de dados - Instruções e Funções Básicas - HAVING


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

HAVING

A cláusula HAVING filtra resultados obtidos pela cláusula GROUP BY.
No exemplo a seguir, a cláusula HAVING COUNT(*) > 4 exclui do resultado final todos os departamentos com quatro membros ou menos.


   SELECT DEPT
   ,      AVG(SALARY)
   FROM   Q.STAFF
   GROUP  BY DEPT
   HAVING COUNT(*) > 4

A consulta gera este relatório:

  DEPT                COL1
------  ------------------
    38    15457.1100000000
    51    17218.1600000000
    66    17215.2400000000

Tanto WHERE quanto HAVING eliminam os dados indesejados do relatório.
A condição WHERE é usada com seleção de coluna.
Ela determina se uma linha individual é incluída.
A condição HAVING é usada com funções embutidas.
Ela determina se um grupo inteiro é incluído.

HAVING é sempre seguida de uma função de coluna (como SUM, AVG, MAX, MIN ou COUNT).
HAVING também pode ser seguida de uma subconsulta que encontra um valor agrupado para completar a condição HAVING.
Use WHERE para excluir dados de linha não desejados e HAVING para excluir dados agrupados não desejados.

Exemplo:

  • Isto é correto: HAVING MIN(YEARS) > 6
  • Isto é incorreto: HAVING YEARS > 6

Exemplos adicionais:

  • Para listar o salário menor, maior e médio em cada departamento, excluindo os gerentes, para departamentos com uma média salarial maior do que $12.000, use uma consulta como a seguinte:
       SELECT DEPT
       ,      MIN(SALARY)
       ,      MAX(SALARY)
       ,      AVG(SALARY)
       FROM   Q.STAFF
       WHERE  JOB <> 'MGR'
       GROUP  BY DEPT
       HAVING AVG(SALARY) > 12000

    Essa consulta produz o seguinte relatório:

         DEPT         COL1         COL2                COL3
       ------  -----------   ----------  ------------------
           15     12258.50     16502.83    13756.5100000000
           20     13504.60     18171.25    15309.5333333333
           38     12009.75     18006.00    14944.7000000000
           42     10505.90     18001.75    13338.7500000000
           51     13369.80     19456.50    16235.2000000000
           66     10988.00     21000.00    16880.1750000000
           84     13030.50     17844.00    15443.0000000000

    A palavra-chave HAVING só pode ser utilizada com os dados agrupados.
    Quando as cláusulas HAVING e GROUP BY estiverem sendo usadas, a cláusula HAVING deve acompanhar a cláusula GROUP BY.

  • Para listar, para cada número de anos de serviço, o número de funcionários com aquele número de anos e seus salários médios, mas apenas para grupos com mais de dois funcionários, use uma consulta como a seguinte:
    
       SELECT YEARS
       ,      COUNT(*)
       ,      AVG(SALARY)
       FROM   Q.STAFF
       GROUP  BY YEARS
       HAVING COUNT(*) > 2

    Essa consulta produz o seguinte relatório:

       YEARS         COL1                COL2
      ------  -----------  ------------------
           5            5    15552.0400000000
           6            6    16930.0250000000
           7            6    18611.8050000000
          10            3    20162.6000000000
         -              4    13694.0625000000

Veja também:


© Copyright IBM Corp.