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 brande em marca e a expressãoSELECTCOUNT(*)

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 WHEREas 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