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:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
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.
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:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Try It Out
Now, pode encontrar que encomenda tem vendas totais superiores a 1000 usando a cláusula como se segue:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
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:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
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:
Code language: SQL (Structured Query Language) (sql)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;
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.