Isso está no MSSQL/Azure SQL.
Tenho a seguinte tabela de vendas:
Line_Item_ID | Sales_Order_ID | SKU |
---|---|---|
1 | 1 | 4 |
2 | 1 | 1 |
3 | 2 | 4 |
4 | 3 | 1 |
5 | 3 | 7 |
6 | 3 | 4 |
7 | 4 | 4 |
8 | 5 | 1 |
9 | 5 | 8 |
Estou tentando obter uma saída que mostre para cada SKU, o número total de pedidos (muito fácil) E o número total de itens de linha para um pedido que contém esse SKU.
Então para a primeira parte:
select SKU, count(distinct(sales_order_id) as "Order_Count" from Table T
group by SKU
Fácil o suficiente, no entanto, a segunda parte está fazendo minha cabeça -
A saída desejada ficaria assim:
SKU | Order_Count | Line_Item_Count |
---|---|---|
1 | 3 | 7 |
4 | 4 | 7 |
7 | 1 | 3 |
8 | 1 | 2 |
Como obtenho uma contagem do total de Line_item_IDs para cada pedido que contém um SKU? Idealmente em uma única consulta sem uma carga de junções malucas ou subconsultas.
Você pode usar uma função de janela com a
COUNT()
função em uma CTE ou subconsulta para obter aLine_Item_ID
contagem total porSales_Order_Id
ou até mesmo agrupá-la separadamente nesse ponto e juntá-la novamente à sua consulta existente com umSUM()
em cima dela para obter o totalLine_Item_ID
para cadaSKU
um assim:Sinta-se à vontade para renomear e reformatar a caixa da sintaxe que usei, conforme necessário.
Dependendo dos índices disponíveis e do tamanho dos dados, você pode achar isso útil