Comecei a atualizar meus conhecimentos de SQL e a tentar praticar alguns desafios usando os esquemas do W3School nesse link . O problema que estou tentando resolver é "Como encontrar os IDs dos clientes da tabela Order and OrderDetails que encomendaram mais de 3 produtos diferentes e agrupá-los no intervalo de mais de 3 ou 10 pedidos, com base no número de pedidos que eles fizeram"
Meu esforço:
select Distinct(o.CustomerID),
case
when count (Distinct (od.OrderID)) >= 0 and count (Distinct (od.OrderID)) <= 1 then '0 - 1'
when count (Distinct (od.OrderID)) >= 2 and count (Distinct (od.OrderID)) <= 4 then '3-4'
else 'no match'
end As NumOrd
from Orders o
join OrderDetails od
where o.OrderID = od.OrderID
group by od.OrderId
having count (od.OrderID) > 1;
erro de sintaxe ou W3School que não está dizendo claramente o que está errado e minha abordagem está correta?
Atualização: Assim que adiciono a segunda declaração de caso, recebo um erro de sintaxe ou o W3School que não está dizendo claramente o que está errado -> Isso foi corrigido com base no comentário do @Gordon. No entanto, agora todos os registros estão entrando no primeiro intervalo, mesmo se houver Clientes que fizeram pedidos mais de 3 vezes.
Com base nos comentários, adicionando mais detalhes: Se você vê as consultas abaixo, vejo o CustomerId 7 e 10 pedidos 4 pedidos diferentes e o cliente 5 pedidos 3 pedidos. Quero criar baldes (0-3,4-6, 6-10) com base no número de pedidos que eles fazem.
select distinct(o.CustomerID) from Orders o join OrderDetails od where o.OrderID = od.OrderID group by od.OrderId having count (od.OrderID) > 1;
Você deve group by o.CustomerID
e na CASE
expressão há apenas 2 casos que você deve verificar porque na having
cláusula de se certificar de que apenas os clientes com pelo menos 3 ordens são retornados:
select
o.CustomerID,
case
when count(distinct od.OrderID) between 3 and 9 then '3+'
when count(distinct od.OrderID) >= 10 then '10+'
end NumOrd
from Orders o inner join OrderDetails od
on o.OrderID = od.OrderID
group by o.CustomerID
having count(distinct od.OrderID) >= 3
Você também menciona na sua pergunta que o requisito é:
para encontrar IDs de clientes da tabela Order and OrderDetails que encomendaram mais de 3 produtos diferentes
Então, talvez, em vez de contar OrderID
s, você deva contar ProductID
se deve mudar para:
count(distinct od.ProductID)
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras