Liste o nome completo (first_name
e last_name
) e o item comprado por todos os clientes que moram no Reino Unido (UK) e compraram algum produto com valor acima de 1000.
- Campos:
first_name
,last_name
,item
- Filtro por país:
UK
- Filtro por valor:
amount > 1000
SELECT C.first_name, C.last_name, O.item FROM Customers C INNER JOIN Orders O ON C.customer_id = O.customer_id WHERE C.country = 'UK' AND O.amount > 1000 ORDER BY C.customer_id ASC;
- Use
=
ao invés deIS
para comparar valores literais (country = 'UK'
). IS
é usado geralmente paraNULL
,TRUE
,FALSE
.- A condição
O.amount > 1000
é essencial para limitar aos pedidos de alto valor.
Mostre o country
e o total de pedidos realizados por clientes de cada país, somente para países que realizaram mais de 1 pedido.
- Campos:
country
,total_pedidos
- Filtro por países com mais de um pedido
SELECT C.country, COUNT(O.order_id) AS total_pedidos FROM Customers C INNER JOIN Orders O ON C.customer_id = O.customer_id GROUP BY C.country HAVING COUNT(O.order_id) > 1 ORDER BY C.country;
- GROUP BY agrupa os resultados por país.
- HAVING é utilizado após o GROUP BY para filtrar os resultados agregados (diferente do WHERE que filtra linha a linha).
- ORDER BY organiza o resultado final alfabeticamente pelo país.
Liste o first_name
, last_name
e country
de todos os clientes que não fizeram nenhum pedido.
- Pode-se usar
SUBQUERY
ouLEFT JOIN
.
- Campos:
first_name
,last_name
,country
- Somente clientes sem pedidos associados
SELECT C.first_name as name, C.last_name as sobrenome, C.country as país FROM Customers C LEFT JOIN Orders O ON C.customer_id = O.customer_id WHERE C.customer_id NOT IN(SELECT customer_id FROM Orders) --OU SELECT C.first_name AS name, C.last_name AS sobrenome, C.country AS país FROM Customers C LEFT JOIN Orders O ON C.customer_id = O.customer_id WHERE O.customer_id IS NULL;
Para cada país, mostre o nome completo (first_name
+ last_name
) do cliente que fez o pedido de maior valor.
- Campos:
country
,first_name
,last_name
,amount
SELECT C.country AS país, C.first_name AS name, C.last_name AS sobrenome, MAX(amount) as quantidade FROM Customers C LEFT JOIN Orders O ON C.customer_id = O.customer_id GROUP BY C.country --OU SELECT C.country AS país, C.first_name AS name, C.last_name AS sobrenome, MAX(amount) as quantidade FROM Customers C LEFT JOIN Orders O ON C.customer_id = O.customer_id GROUP BY C.country HAVING O.customer_id IS NOT NULL;