Como: Use HAVING e onde as cláusulas na mesma consulta

Em alguns casos, convém excluir linhas individuais de grupos (usando uma cláusula WHERE) antes de aplicar uma condição aos grupos como um todo (usando uma cláusula HAVING).

Uma cláusula HAVING é como uma cláusula WHERE, mas só se aplica a grupos como um todo (isto é, às linhas no conjunto de resultados representando os grupos), enquanto que a cláusula WHERE se aplica às linhas individuais. Uma consulta pode conter tanto uma cláusula WHERE quanto uma cláusula HAVING. Nesse caso:

  • A cláusula WHERE é aplicada primeiro linhas individuais em tabelas ou objetos de valor de tabela no painel do diagrama. Somente as linhas que atendam às condições na cláusula WHERE são agrupadas.

  • A cláusula HAVING é então aplicada às linhas no conjunto de resultados. Somente os grupos que atendem a HAVING condições aparecem na saída da consulta. Você pode aplicar uma cláusula HAVING somente às colunas que também aparecem na cláusula GROUP BY ou em uma função agregada.

Por exemplo, imagine que você está ingressando a titles e publishers tabelas para criar uma consulta mostrando o preço médio de catálogo para um conjunto de editoras. Para ver o preço médio somente de um conjunto de editoras específico — talvez somente as editoras do estado da Califórnia. E mesmo assim, você deseja ver o preço médio somente se ele for acima de r $10,00.

Você pode estabelecer a primeira condição incluindo uma cláusula WHERE que descarta quaisquer editores que não sejam da Califórnia, antes de calcular os preços. A segunda condição exige uma cláusula HAVING, pois a condição baseia-se nos resultados do agrupamento e resumindo os dados. A instrução de SQL resultante pode parecer com isso:

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
   ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10

Você pode criar dois HAVING e cláusulas WHERE no painel de critérios. Por padrão, se você especificar um critério de pesquisa para uma coluna, a condição se torne parte da cláusula HAVING. No entanto, você pode alterar a condição de ser uma cláusula WHERE.

Você pode criar uma cláusula WHERE e uma HAVING envolvendo a mesma coluna. Para fazer isso, você deve adicionar a coluna duas vezes para o painel de critérios e especificar uma instância como parte da cláusula HAVING e a outra instância como parte da cláusula WHERE.

ObservaçãoObservação

The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. For more information, see Trabalhando com configurações.

Para especificar uma condição WHERE em uma consulta agregada

  1. Especifique os grupos para a sua consulta. For details, see Como: Agrupar linhas em resultados de consulta.

  2. Se ainda não estiver no painel de critérios, adicione a coluna na qual deseja basear a condição WHERE.

  3. Limpar o saída coluna, a menos que a coluna de dados é parte da cláusula GROUP BY ou incluída em uma função agregada.

  4. No filtro coluna, especifique a condição WHERE. A consulta e o modo de exibição Designer adiciona a condição à cláusula HAVING da instrução SQL.

    ObservaçãoObservação

    A consulta mostrada no exemplo desse procedimento associa duas tabelas, titles e publishers.

    Neste ponto na consulta, a instrução SQL contém uma cláusula HAVING:

    SELECT titles.pub_id, AVG(titles.price)
    FROM titles INNER JOIN publishers 
       ON titles.pub_id = publishers.pub_id
    GROUP BY titles.pub_id
    HAVING publishers.state = 'CA'
    
  5. No Group By coluna, selecione onde da lista de opções de resumo e de grupo. A consulta e o modo de exibição Designer remove a condição da cláusula HAVING na instrução SQL e o adiciona à cláusula WHERE.

    As alterações de instrução de SQL para incluir uma cláusula WHERE em vez disso:

    SELECT titles.pub_id, AVG(titles.price)
    FROM titles INNER JOIN publishers 
       ON titles.pub_id = publishers.pub_id
    WHERE publishers.state = 'CA'
    GROUP BY titles.pub_id
    

Consulte também

Outros recursos

Classificar e agrupar os resultados da consulta

Resumindo os resultados da consulta