Compartilhar via


Como: Use HAVING e WHERE 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 sistema autônomo um todo (usando uma cláusula HAVING).

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

  • A cláusula WHERE é aplicada primeiro a linhas individuais das tabelas ou objetos com valor de tabela no painel do diagrama.Somente as linhas que atendam às condições da 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 agrupar BY ou em uma função de agregação.

Por exemplo, imagine que você está ingressando o 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 mais US$ 10,00.

Você pode estabelecer a primeira condição incluindo uma cláusula WHERE, que descarta quaisquer editores que não estão na Califórnia, antes de calcular a médio de preços.A segunda condição exige uma cláusula HAVING, pois a condição é baseada nos resultados do agrupamento e resumindo os dados.O resultante demonstrativo SQL poderia ter esta aparência:

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 Critérios.Por padrão, se você especificar um critério de Pesquisar para uma coluna, a condição se tornará parte da cláusula HAVING.No entanto, você pode alterar a condição a ser uma cláusula WHERE.

Você pode criar uma cláusula WHERE e uma cláusula HAVING envolvendo a mesma coluna.Para fazer isso, você deve adicionar a coluna duas vezes para o painel Critérios, em seguida, especificar uma instância sistema autônomo parte da cláusula HAVING e a Outros instância sistema autônomo parte da cláusula WHERE.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Para especificar uma condição WHERE em uma consulta de agregação

  1. Especifique os grupos para a sua consulta.Para obter detalhes, consulte:Como: agrupar de linhas em resultados da consulta.

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

  3. desmarcar o Saída coluna, a menos que a coluna de dados seja parte da cláusula agrupar BY ou incluídas em uma função de agregação.

  4. No Filtro coluna, especifique a condição WHERE.O consulta e View Designer adiciona a condição à cláusula HAVING do demonstrativo SQL.

    Observação:

    A consulta mostrada no exemplo para esse procedimento associa duas tabelas titles e publishers.

    Neste ponto, na consulta, o demonstrativo 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 Agrupar por coluna, selecionar Onde na lista de grupo e opções de resumo.O consulta e View Designer remove a condição da cláusula HAVING o demonstrativo SQL e o adiciona à cláusula WHERE.

    As alterações de demonstrativo SQL inclui 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