Estou olhando uma tabela de pedidos de um site de comércio eletrônico, tentando determinar quantos pedidos incluem múltiplos do mesmo produto, mas para cores ou tamanhos diferentes .
Um exemplo de pedido seria um com 7 SKUs no total. 1 é apenas 1 produto / cor / tamanho, mas os 6 restantes são todos do mesmo produto / cor, mas 6 tamanhos diferentes. Essa mesa ficaria assim.
order_id | product | sizes | colors
-----------------------------------
1 | A | 6 | 1
1 | B | 1 | 1
Eu gostaria de obter apenas um verdadeiro / falso se o pedido tiver múltiplos na categoria de tamanho ou categoria de cor. Portanto, a tabela resultante ficaria assim.
order_id | multiple_sizes | multiple_colors
-------------------------------------------
1 | true | false
Eu tentei usar coisas como IF(sizes > 1, true, false) mult_sizes, IF(colors > 1, true, false) mult_colors
e posso obter isso como verdadeiro / falso para cada linha, mas não consigo descobrir como agrupá-lo com base no id sozinho e retornar um verdadeiro se houver um verdadeiro para qualquer produto.
Já tentei coisas semelhantes no passado usando CASE WHEN, procurei usar HAVING e várias outras soluções, mas não consigo encontrar uma solução para esse problema exato. Desculpe se essa pergunta foi respondida em outro lugar, terei prazer em referir outra coisa, se você puder me indicar lá. Obrigado.
Use case
lógica e agregação:
select order_id,
(min(size) <> max(size)) as has_muliple_sizes,
(min(color) <> max(color)) as has_muliple_colors
from t
group by order_id;
Você também pode usar count(distinct)
:
select order_id,
(count(distinct size) > 1) as has_muliple_sizes,
(count(distinct color) > 1) as has_muliple_colors
from t
group by order_id;
Mas acho que count(distinct)
pode incorrer em mais sobrecarga.
EDITAR:
Posso ter entendido mal o que as colunas size
e color
representam. Se estes são, na verdade, já o número de tamanhos e número de cores, em seguida, nomes apropriados seria num_sizes
e num_colors
. Mais importante, o SQL usaria apenas max()
:
select order_id,
(max(size) > 1) as has_muliple_sizes,
(max(color) > 1) as has_muliple_colors
from t
group by order_id;
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras