Consulta retornando valores divergentes

23/02/2020

0

Pessoal, tudo bem?

Estou com dúvida em uma consulta simples, já identifiquei o problema mas não sei como resolver rs

No exemplo a seguir quero consultar o volume, receita e ticket médio em cada um dos produtos vendidos.
Caso não inclua o "Item_cardapio", a consulta retorna um valor e quando incluo retorna outro.

Olhando para o mês de janeiro que puxei aqui, o volume total deveria ser 68 produtos vendidos, quando incluído o "Item_cardapio" esse número passa a ser 138 (68 pedidos reais + 70 pedidos com contagem duplicada + 2 pedidos cancelados), mesmo tendo feito a contagem distinta.

Como posso incluir o nome de cada item e fazer com que a contagem seja distinta?

Valeu!


select
date_trunc('month',o.order_date_local) Mes
,i.item_description Item_cardapio
,count(distinct o.order_number) Volume
,sum (i.item_total_price_portal) Receita
,round(sum (i.item_total_price_portal)/count(distinct o.order_number),2) Ticket_medio


from order_curated.orders o
join order_curated.items i
on o.order_number = i.order_number
and o.frn_id = i.frn_id

where
o.frn_id = 'xpto00'
and o.order_date_local >= '2019-08-01'
and o.order_date_local <= '2020-01-31'
and o.last_status = 'CONCLUDED'

group by
1,2
Marcos

Marcos

Responder

Posts

26/02/2020

Anderson Gonçalves

Pessoal, tudo bem?

Estou com dúvida em uma consulta simples, já identifiquei o problema mas não sei como resolver rs

No exemplo a seguir quero consultar o volume, receita e ticket médio em cada um dos produtos vendidos.
Caso não inclua o "Item_cardapio", a consulta retorna um valor e quando incluo retorna outro.

Olhando para o mês de janeiro que puxei aqui, o volume total deveria ser 68 produtos vendidos, quando incluído o "Item_cardapio" esse número passa a ser 138 (68 pedidos reais + 70 pedidos com contagem duplicada + 2 pedidos cancelados), mesmo tendo feito a contagem distinta.

Como posso incluir o nome de cada item e fazer com que a contagem seja distinta?

Valeu!


select
date_trunc('month',o.order_date_local) Mes
,i.item_description Item_cardapio
,count(distinct o.order_number) Volume
,sum (i.item_total_price_portal) Receita
,round(sum (i.item_total_price_portal)/count(distinct o.order_number),2) Ticket_medio


from order_curated.orders o
join order_curated.items i
on o.order_number = i.order_number
and o.frn_id = i.frn_id

where
o.frn_id = 'xpto00'
and o.order_date_local >= '2019-08-01'
and o.order_date_local <= '2020-01-31'
and o.last_status = 'CONCLUDED'

group by
1,2




Amigo me informa qual o teu banco de dados por favor.

Depois entra em contato comigo para eu te ajudar, to vendo algumas coisas que podem melhorar no seu código, por exemplo utilize a função BETWEEN para comparação de intervalos, no caso das datas que você está querendo verificar.

Select * from TABELA
where DATA between :INICIO AND :FINAL

Fora isso tem mais coisas então melhor você entrar em contato comigo.

Skype: anderson@case13.com.br
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar