Usuários de SQL que pedem mais de n produtos

Explorer:

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;

insira a descrição da imagem aqui

morre:

Você deve group by o.CustomerIDe na CASEexpressão há apenas 2 casos que você deve verificar porque na havingclá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 OrderIDs, você deva contar ProductIDse deve mudar para:

count(distinct od.ProductID)

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

entradas de pedidos têm vários produtos com quantidade vendida como obter os produtos mais vendidos com base na quantidade de produtos

SaltStack: $ HOME de usuários que ainda não existe

Obtenha a maior quantidade, contagem de produtos / usuários

SQL: obter usuários que não fizeram login em determinado intervalo de datas

Como o jmeter simula mais threads (usuários) do que o número real de minhas threads na cpu?

Recupere o cliente que comprou mais de 13 produtos diferentes que nunca comprou o mesmo produto

Ocultar produtos específicos de usuários não registrados no WooCommerce

Oculte completamente os produtos de usuários não autorizados no WooCommerce

Como filtrar usuários que leram mais de 4 livros?

Design de tabela SQL para usuários que podem deixar comentários aos usuários

Design de tabela SQL para usuários que podem deixar comentários aos usuários

Node JS impede que usuários excluam produtos de outros usuários

Produtos de contagem SQL

Produtos de contagem SQL

Comandos sql para buscar os usuários que não ofereceram caronas no esquema de banco de dados de carona

Lista de todos os usuários que possuem mais de 40 documentos cada no ElasticSearch

Usuários que não contêm; filtrar e listar se houver mais de um ... MYSQL

guias de cromo personalizadas pedem para vários navegadores escolherem

Número SQL de produtos

Qual é a maneira mais elegante de impedir que usuários acessem o conteúdo de outros usuários?

Mostra a lista de usuários que se parece com o formato de lista de produtos de comércio eletrônico em php

Consultar autores / usuários que publicaram produtos

sql seleciona comentários mais recentes a partir do comentário mais recente de um usuário

Exibir uma lista de produtos privados para usuários não registrados no WooCommerce

Dê os nomes dos funcionários que vendem produtos de mais de 10 fornecedores

Remova os recursos do WordPress de usuários que não têm mais a função

Liste todos os usuários que possuem logs de mais de 1 dia

SQL - Crie uma consulta que mostre os usuários que mais se conectaram em um determinado período de tempo

Melhor abordagem para exibir todos os usuários que fizeram mais de 1 compra em um mês no SQL

TOP lista

quentelabel

Arquivo