Sumário: neste tutorial, aprenderá como usar MySQL HAVING cláusula para especificar uma condição de filtro para grupos de linhas ou agregados.

Clusula de introdução ao MySQL HAVING

A cláusula é utilizada na SELECT declaração para especificar condições de filtragem para um grupo de linhas ou agregados.

A cláusula é frequentemente utilizada com a cláusula GROUP BY para filtrar grupos com base numa condição especificada. Se a cláusula GROUP BY for omitida, a cláusula comporta-se como a cláusula WHERE.

O seguinte ilustra a sintaxe do cláusula:

SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
Code language: SQL (Structured Query Language) (sql)

Nesta sintaxe, especifica-se uma condição na cláusula . Se uma linha, que é gerada pelo grupo por cláusula, fizer com que a cláusula group_condition avalie a verdade, a consulta irá incluí-la no conjunto de resultados.

Notificar que a cláusula aplica uma condição de filtro a cada grupo de linhas, enquanto a cláusula WHERE aplica a condição de filtro a cada linha individual.

MySQL avalia a cláusula após a cláusula FROMWHERESELECT e GROUP BY cláusulas e antes de ORDER BY, e LIMIT cláusulas.

div>Nota que a norma SQL especifica que o é avaliado antes de SELECT cláusula e depois de GROUP BY cláusula.

Exemplos de cláusula do MySQL HAVING

Vejamos alguns exemplos de utilização da cláusula para ver como funciona. Vamos utilizar a tabela orderdetails na base de dados de amostras para a demonstração.

O seguinte utiliza a cláusula GROUP BY para obter números de encomenda, o número de artigos vendidos por encomenda, e o total de vendas para cada um da tabela orderdetails:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Now, pode encontrar que encomenda tem vendas totais superiores a 1000 usando a cláusula como se segue:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Code language: SQL (Structured Query Language) (sql)

Try It Out

p>Pode construir uma condição complexa na cláusula usando operadores lógicos como OR e AND.

O exemplo seguinte usa a cláusula para encontrar encomendas que tenham montantes totais superiores a 1000 e contenham mais de 600 itens:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Code language: SQL (Structured Query Language) (sql)

Try It Out

Suponha que pretende encontrar todas as encomendas que estão em estado de expedição e que têm a quantidade total superior a 1500, pode juntar a tabela orderdetails com a tabela orders usando a cláusula INNER JOIN e aplicar uma condição sobre status coluna e total agregado como se mostra na seguinte consulta:

SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Code language: SQL (Structured Query Language) (sql)

Try It Out

p> O cláusula só é útil quando a utiliza com a cláusula GROUP BY cláusula para gerar a saída da altarelatórios de nível. Por exemplo, pode usar a cláusula para responder a perguntas como encontrar o número de encomendas deste mês, deste trimestre, ou deste ano que tenham vendas totais superiores a 10K.

Neste tutorial, aprendeu a utilizar a cláusula MySQL com a cláusula GROUP BY para especificar condições de filtragem para grupos de linhas ou agregados.

  • Este tutorial foi útil?
  • Sim Não
  • Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *