Compartilhar via


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

Em alguns casos, talvez você queira 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 que representam grupos), ao passo que a cláusula WHERE se aplica às linhas individuais.Uma consulta pode conter uma cláusula WHERE e uma cláusula HAVING.Neste caso:

  • A cláusula WHERE é aplicada primeiro para linhas individuais em tabelas ou objetos com 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 do 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 a 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

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações de Visual Studio.

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

  1. Especifique os grupos para a sua consulta.Para obter detalhes, consulte: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.

    Nesse momento 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