4 maneiras de calcular um total em execução com o SQL - Agatetepê
- Provavelmente você teria uma datakey e uma tabela de dimensões para todas as datas. No entanto, nós não queremos adicionar uma junção extra que - talvez possa complicar o conceito que estamos explicando
SUM (Profit) over (partição por driver_id, ano, mês order by day)
, driver_id
FROM f_daily_rides
Isso pode ser útil para comparar o lucro que um motorista recebe no dia a dia por mês. Você pode ser capaz de detectar algum tipo de tendência. Talvez isso possa ajudá-lo a identificar drivers ruins ou outras tendências. Além disso, é bom apenas reportar ao motorista.
Eles poderiam facilmente alternar entre diferentes dias para ver quanto eles fizeram a partir de x dia do mês.
No entanto, o uso de uma função analítica em uma entrevista pode, às vezes, levar o entrevistador a perguntar se você conhece uma maneira diferente de resolver o problema. Não é que a sua resposta esteja errada, é apenas que eles podem estar interessados em ver o seu pensamento.
Usando uma associação própria
Outra opção para resolver o problema total em execução é usar uma auto-união. Uma auto-adesão refere-se a unir uma tabela a si mesma. Ao contrário da sua junção típica, onde você usará o "=" para todos os valores, ingressaremos em vários valores. Primeiramente, nós nos juntaremos ao ID do motorista e ao mês / ano normalmente e então nos uniremos na data da viagem. Quando nos juntarmos à data da viagem, usaremos o sinal> =. Isso unirá todas as datas de uma tabela que são maiores que as datas da outra tabela.
Então, se olharmos para a consulta abaixo, veremos essa estrutura básica. É um pouco mais complicado do que apenas usar uma função analítica. Se você fosse capaz de criar isso sozinho, ótimo trabalho!
, SUM (Lucro)
t2.day
t1.driver_id
t2.Profit
DE f_daily_rides t1
JOIN f_daily_rides t2
Em driver_id = driver_id
E t1.Mês = t2.Mês
E t1.ano = t2.ano
E t1.dia> = t2.dia
Agrupar por dia
Aqui está como seriam os dados na subconsulta. Se você notar que o campo t1.day tem valores repetidos para datas em que o t1.day é maior que o t2.day. Ao fazer isso, você pode agregar em t1.day e obter um total em execução.
Usando uma subconsulta na cláusula de seleção
Uma das últimas maneiras em que vimos pessoas calcularem um total em execução é usar uma subconsulta na instrução select. Isso tem algumas semelhanças com uma auto-junção, exceto que a auto-união ocorre dentro da instrução select. Isso geralmente não é recomendável porque o uso desse método geralmente força a consulta a varrer a tabela para cada linha existente na tabela original novamente. Isso tende a ser muito ineficiente, mas achamos que é sempre bom ter uma compreensão geral de todas as opções possíveis.
- Para simplificar, não vamos nos concentrar no mês e ano
, (Selecione soma (lucro) de f_daily_rides t2 onde t1.day> = t2.day e t1.driver_id = t2.driver_id)
Projetando Uma Tabela Para Rastrear Uma Soma Contínua
Além de usar consultas ad-hoc diretas, outra opção é projetar uma tabela para rastrear o total em execução. O que este design parece variará no objetivo. Mais do que provavelmente, o objetivo será preencher um aplicativo ou um painel. Com base nos requisitos, altera o design geral. Se fôssemos simples, como no exemplo acima, onde temos uma soma rotativa para um usuário por mês, basta inserir uma nova linha que acrescente o valor anterior, se for para o mesmo mês e ano.
Isso limitaria a facilidade de ser dinâmico. Por exemplo, e se você decidir que deseja ver o total em execução a cada três meses?
Existem algumas maneiras de abordar isso. Incluindo alguns dos métodos acima. Vamos deixar você pensar sobre isso!
Por favor, sinta-se livre para entrar em contato com qualquer dúvida ou comentário. Se você tiver algum problema que você gostaria de resolver, ou novas soluções, em seguida, chegar até hoje.
Estamos nos concentrando em uma série de solução de problemas e gostaríamos de saber quais problemas você está tentando resolver ou se gostaria de ver resolvidos.
Anteriores Post anterior: Métricas para compreender modelos de regressão em inglês simples: parte 1
Próximo Próximo post: Aprendizado profundo – conjunto de dados de sinal de trânsito alemão com Keras