3.1 Instrução GROUP BY
A linguagem SQL é muito poderosa. Além da simples busca de dados, permite agrupar dados no momento da consulta. Por exemplo, queremos saber quantos tipos de produtos de cada marca temos, como podemos fazer isso?
Existe um operador especial para isso GROUP BY
, aqui está como está escrito.
GROUP BY column
Vamos escrever uma consulta que pede ao SQL para exibir o número de tipos de produto para cada marca. Tal solicitação seria mais ou menos assim:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Você obterá o seguinte resultado da consulta:
marca | contar(*) |
---|---|
(NULO) | 2 |
Bosch | 4 |
IKEA | 6 |
LG | 2 |
flor inteligente | 1 |
Vamos analisar cuidadosamente que tipo de solicitação escrevemos e que tipo de resultado obtivemos. Como resultado, vemos duas colunas. O primeiro com uma lista de marcas, o que é lógico. Queríamos obter algo como um conjunto de pares "marca --> quantidade" .
Observe que entre os nomes das marcas há uma palavra NULL
. De fato, temos produtos da marca em que está escrito NULL
, e os vemos aqui. Um pouco inesperado, mas útil. Podemos ver quantos produtos sem marca existem.
Agora vamos dar uma olhada no pedido. Queríamos saber a quantidade de produtos de cada marca, então escrevemos , GROUP BY brand
e em marca e a expressãoSELECT
COUNT(*)
COUNT(*)
é uma chamada função de agregação que é executada em um grupo de linhas. No nosso caso, ela simplesmente conta o número deles. Existem muitas dessas funções e as examinaremos um pouco mais tarde.
3.2 Consultas complexas com GROUP BY
Agora vamos escrever uma consulta onde primeiro descartamos produtos cujo preço é menor que 10 e depois os agrupamos. Tal solicitação seria mais ou menos assim:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Você obterá o seguinte resultado da consulta:
marca | contar(*) |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
flor inteligente | 1 |
Todos os produtos NULL desapareceram da nossa tabela de resultados, pois eram muito baratos, e o número de produtos IKEA diminuiu 1. De 6 para 5.
Isso sugere que você primeiro aplique WHERE
as linhas desejadas para filtrar e só então aplique o agrupamento ao resultado.
3.3 Nomes das colunas do resultado
A propósito, você pode dar nomes às colunas resultantes. Veja como o servidor sugeriu o nome count(*)
? Vamos substituí-lo por total. Tal solicitação seria mais ou menos assim:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Você obterá o seguinte resultado da consulta:
marca | total |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
flor inteligente | 1 |
Você também pode renomear colunas existentes. Vamos pegar uma das consultas usadas anteriormente e adicionar novos nomes às colunas.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Você obterá o seguinte resultado da consulta:
ID do produto | Nome do Produto | preço |
---|---|---|
2 | Cadeira | 5,00 |
8 | Lâmpada | 15h00 |
GO TO FULL VERSION