Anterior: [MySQL Must Know and Know (9)] [Resumo de dados]
++++++++++++++ Linha inicial +++++++++++++++++
Artigo Diretório
1. Agrupamento de dados
Retorna o número de produtos fornecidos pelo fornecedor 1003
mysql> SELECT COUNT(*) AS num_prods
-> FROM products
-> WHERE vend_id =1003;
Dois, crie um grupo
mysql> SELECT vend_id, COUNT(*) AS num_prods
-> FROM products
-> GROUP BY vend_id;
Em relação às disposições de GROUP BY 1. A
cláusula GROUP BY pode conter qualquer número de colunas
. 2. Os grupos são aninhados na cláusula GROUP BY, e os dados serão resumidos no último grupo especificado. 3. A cláusula GROUP BY está
listada na frase Cada coluna de deve ser uma coluna de recuperação ou uma expressão válida
4. Exceto para instruções de cálculo agregadas, cada coluna na instrução SELECT deve ser fornecida na cláusula GROUP BY
5. Se o agrupamento tiver um valor NULL, então NULL Será devolvido como um grupo.
6. A cláusula GROUP BY deve aparecer após a cláusula WHERE e antes da cláusula ORDER BY
Três, grupo de filtro
HAVING suporta todos os operadores WHERE
As condições e opções da cláusula WHERE são aplicáveis a HAVING, a sintaxe é a mesma, as palavras-chave são diferentes
mysql> SELECT cust_id, COUNT(*) AS orders
-> FROM orders
-> GROUP BY cust_id
-> HAVING COUNT(*) >= 2;
Diferença entre HAVING e WHERE
WHERE filtros antes do agrupamento de dados, HAVING filtros após o agrupamento de dados
Liste os fornecedores com mais de dois produtos com um preço de 10 ou mais
mysql> SELECT vend_id, COUNT(*) AS num_prods
-> FROM products
-> WHERE prod_price >= 10
-> GROUP BY vend_id
-> HAVING COUNT(*) >= 2;
mysql> SELECT vend_id,COUNT(*) AS num_prods
-> FROM products
-> GROUP BY vend_id
-> HAVING COUNT(*) >= 2;
Quatro, agrupamento e classificação
Recupere o número do pedido e o preço total do pedido de pedidos cujo preço total do pedido seja maior ou igual a 50
mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >= 50;
Classificar a produção pelo preço total do pedido
mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >= 50
-> ORDER BY ordertotal;
Cinco, ordem da cláusula SELECT
SELECT-FROM-WHERE-GROUP BY (descrição do grupo) -HAVING (filtragem no nível do grupo) -ORDER BY-LIMIT
++++++++++++++ Linha final +++++++++++++++++