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 FROM
WHERE
SELECT
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.