20th Jul 2022 7 minutos de leitura SQL empresarial: Como calcular o crescimento da receita em SQL Tihomir Babic sql aprender sql revenue growth Índice Por que calcular o crescimento da receita? Usando as funções LEAD() e LAG() para calcular o crescimento da receita Exemplo Cálculo da porcentagem de crescimento da receita Você também quer trabalhar em seu crescimento profissional? Você pode usar SQL nos negócios? É claro que você pode! Por exemplo, você pode calcular o crescimento da receita em SQL - aqui está como. Como alguém que trabalha com dados, você já sabe que SQL é a ferramenta mais utilizada na análise de dados. Mas como o SQL é útil no uso empresarial? Bem, a resposta é óbvia: analisar dados comerciais usando SQL! Entretanto, existem algumas especificidades com dados comerciais que podem ser complicadas se você não estiver acostumado a isso. Estas especificidades também exigem algumas funções SQL que você pode ainda não ter usado: funções de janela. Se você não está familiarizado com as funções de janela SQL, recomendo que você aprenda um pouco sobre elas antes de continuar. Esta visão geral das funções de janela lhe dará um bom começo, assim como este artigo sobre funções de janela com exemplos. Se você já está um pouco familiarizado com funções de janela e precisa de uma rápida atualização antes de se aprofundar, nosso SQL Funções de Janela (Window Functions) em SQL Cheat Sheet o ajudará a entender os exemplos que eu lhe mostrarei. Por que calcular o crescimento da receita? O crescimento da receita é uma métrica importante em qualquer negócio. Quer seja realizado (real) ou projetado, as estatísticas de crescimento de receita são a base para o planejamento e a tomada de decisão do negócio. Salários, novos investimentos, preço das ações, etc.; tudo é baseado no crescimento (ou declínio) da receita. Entretanto, calcular o crescimento da receita em SQL não é tão fácil. Por que não? Porque é necessário obter a diferença entre duas filas diferentes, não duas colunas diferentes. Qualquer novato em SQL pode encontrar a diferença entre duas colunas. Mas como subtrair as linhas? Usando as funções LEAD() e LAG() para calcular o crescimento da receita Tanto LEAD() quanto LAG() são funções de janela. A função LEAD() permite obter dados de uma linha subseqüente e utilizá-los na linha atual. A função LAG() é exatamente o oposto; você a usa para obter os dados de uma linha anterior. Antes de continuarmos, você deve se familiarizar com a sintaxe de ambas as funções. Exemplo Neste exemplo, você estará usando a tabela monthly_revenue. Esta tabela tem as seguintes colunas: id - A identificação do mês e a chave primária da mesa. month - O mês. revenue - O valor da receita. A tabela contém a receita mensal para dois anos, 2019 e 2020. Você precisa calcular o crescimento mensal da receita. Além disso, para cada mês, você precisa mostrar o valor da receita para o mesmo mês do ano seguinte. Antes de escrever meu código, quero ter certeza de que você entendeu a lógica. Uma vez que você a entenda, escrever seu próprio código será muito mais fácil. O crescimento da receita mensal envolve matemática simples - subtração. Você precisa pegar a receita do mês atual e deduzir a receita do mês anterior. Por exemplo: monthrevenue 2019-01-311,237,844.22 2019-02-281,348,523.26 Você não pode calcular o crescimento da receita para 2019-01-31 porque não há período anterior para compará-la. Mas você pode fazer isso para 2019-02-28. Como? É simples: 1.348.523,26 - 1.237.844,22 = 110.679,04. Que tal obter a receita desse mês no próximo ano (por exemplo, comparando janeiro de 2019 com janeiro de 2020)? Aqui está o que você precisa fazer: monthrevenue 2019-01-311,237,844.22 2019-02-281,348,523.26 2019-03-311,028,423.12 2019-04-301,567,213.49 2019-05-312,108,669.68 2019-06-301,984,632.44 2019-07-31224,557.74 2019-08-312,249,995.11 2019-09-302,104,567.63 2019-10-312,008,412.00 2019-11-302,331,114.50 2019-12-311,978,412.62 2020-01-311,645,112.22 Suponha que seus dados tenham este aspecto; você de alguma forma precisa saltar 12 linhas para obter os dados. Para 2019-01-31, você precisa mostrar o valor atual, que é 1.237.844,22. Mas você também precisa obter os dados para 2020-01-31 (1.645.112,22) e colocá-los na coluna ao lado da receita atual. Agora, é hora de escrever o código de solução de problemas: SELECT month, revenue, revenue - LAG (revenue) OVER (ORDER BY month ASC) AS revenue_growth, LEAD (revenue, 12) OVER (ORDER BY month ASC) AS next_year_revenue FROM monthly_revenue; Este código começa selecionando as colunas month e a receita; você precisa destes dados em seu resultado. A próxima linha usa a função LAG() para calcular o crescimento da receita em relação ao mês anterior. Ela apenas traduz a lógica que lhe expliquei em um código. Lembre-se, LAG() obtém os dados da linha anterior.(Nota: LAG() pode retornar dados de n linhas se você usar o argumento opcional de offset, ou seja, LAG(column_name, n). Se você omitir o argumento de offset, ele retorna o valor da linha anterior). Então esta linha pega a coluna de receita da linha atual e deduz dela o valor da receita da linha anterior; a linha anterior é a receita do mês anterior. Note que LAG() é uma função de janela, portanto é obrigatório incluir a cláusula OVER(). Em nosso OVER(), há uma cláusula ORDER BY que diz que a função de janela deve ser executada de acordo com o mês, em ordem ascendente. Em outras palavras, ela começará a partir de 2019-01-31 e irá até 2020-12-31, mês a mês. Eu nomeei esta coluna revenue_growth. A seguinte linha de código usa a função de janela LEAD(). Lembre-se, esta função permite que você vá buscar os dados de uma próxima linha. Você pode determinar quantas linhas você quer que a função "pule", assim como você pode com LAG(). Neste caso, eu preciso dos dados 12 linhas da linha atual; é por isso que o desvio de 12 linhas está dentro dos parênteses da função. Mais uma vez, temos uma cláusula OVER() com o mesmo princípio do acima: a função será executada de acordo com o mês ascendente. Eu nomeei esta coluna next_year_revenue. Não é tão difícil assim que você entender a lógica, certo? Aqui está o resultado: monthrevenuerevenue_growthnext_year_revenue 2019-01-311,237,844.22NULL1,645,112.22 2019-02-281,348,523.26110,679.041,025,411.77 2019-03-311,028,423.12-320,100.141,331,224.45 2019-04-301,567,213.49538,790.371,812,225.92 2019-05-312,108,669.68541,456.191,945,331.62 2019-06-301,984,632.44-124,037.242,592,333.88 2019-07-31224,557.74-1,760,074.702,108,496.66 2019-08-312,249,995.112,025,437.372,512,367.31 2019-09-302,104,567.63-145,427.482,662,398.45 2019-10-312,008,412.00-96,155.632,925,568.13 2019-11-302,331,114.50322,702.503,108,469.22 2019-12-311,978,412.62-352,701.883,009,964.39 2020-01-311,645,112.22-333,300.40NULL 2020-02-291,025,411.77-619,700.45NULL 2020-03-311,331,224.45305,812.68NULL 2020-04-301,812,225.92481,001.47NULL 2020-05-311,945,331.62133,105.70NULL 2020-06-302,592,333.88647,002.26NULL 2020-07-312,108,496.66-483,837.22NULL 2020-08-312,512,367.31403,870.65NULL 2020-09-302,662,398.45150,031.14NULL 2020-10-312,925,568.13263,169.68NULL 2020-11-303,108,469.22182,901.09NULL 2020-12-313,009,964.39-98,504.83NULL O valor NULL na coluna revenue_growth significa que não há dados antes de 2019-01-31. O valor NULL na coluna next_year_revenue significa que não há dados 12 meses a partir desse mês. Você pode encontrar mais chances de praticar a função LAG() neste artigo sobre o cálculo da diferença entre duas filas. Que tal adicionar um pouco de algo ao resultado acima? Talvez o percentual de crescimento da receita? Cálculo da porcentagem de crescimento da receita Mostrar o crescimento como porcentagem é geralmente ainda mais útil do que mostrar os valores absolutos. Os conselhos de administração gostam especialmente de pensar em porcentagens. Seria muito útil se seu relatório também contivesse esses dados. Para obter este resultado, podemos usar os mesmos dados e o mesmo código que os anteriores. Adicionamos apenas uma linha de código a ele: SELECT month, revenue, revenue - LAG (revenue) OVER (ORDER BY month ASC) AS revenue_growth, (revenue - LAG (revenue) OVER (ORDER BY month ASC))/LAG (revenue) OVER (ORDER BY month ASC)*100 AS revenue_percentage_growth, LEAD (revenue, 12) OVER (ORDER BY month ASC) AS next_year_revenue FROM monthly_revenue; Aqui está a lógica para calcular o crescimento percentual: (current month revenue - previous month revenue)/previous month revenue * 100. Por exemplo: monthrevenue 2019-01-311,237,844.22 2019-02-281,348,523.26 O crescimento percentual da receita para 2019-02-28 é calculado desta forma: (1,348,523.26 - 1,237,844.22)/1,237,844.22 * 100 = 8.94%. No código acima, esta é a linha que faz exatamente isso: (revenue - LAG (revenue) OVER (ORDER BY month ASC))/LAG (revenue) OVER (ORDER BY month ASC)*100 AS revenue_percentage_growth. Provavelmente não há necessidade de explicá-lo novamente. Você entende como funciona a função LAG() e a matemática por trás do cálculo. Aqui está o resultado: monthrevenuerevenue_growthrevenue_percentage_growthnext_year_revenue 2019-01-311,237,844.22NULLNULL1,645,112.22 2019-02-281,348,523.26110,679.048.941,025,411.77 2019-03-311,028,423.12-320,100.14-23.741,331,224.45 2019-04-301,567,213.49538,790.3752.391,812,225.92 2019-05-312,108,669.68541,456.1934.551,945,331.62 2019-06-301,984,632.44-124,037.24-5.882,592,333.88 2019-07-31224,557.74-1,760,074.70-88.692,108,496.66 2019-08-312,249,995.112,025,437.37901.972,512,367.31 2019-09-302,104,567.63-145,427.48-6.462,662,398.45 2019-10-312,008,412.00-96,155.63-4.572,925,568.13 2019-11-302,331,114.50322,702.5016.073,108,469.22 2019-12-311,978,412.62-352,701.88-15.133,009,964.39 2020-01-311,645,112.22-333,300.40-16.85NULL 2020-02-291,025,411.77-619,700.45-37.67NULL 2020-03-311,331,224.45305,812.6829.82NULL 2020-04-301,812,225.92481,001.4736.13NULL 2020-05-311,945,331.62133,105.707.34NULL 2020-06-302,592,333.88647,002.2633.26NULL 2020-07-312,108,496.66-483,837.22-18.66NULL 2020-08-312,512,367.31403,870.6519.15NULL 2020-09-302,662,398.45150,031.145.97NULL 2020-10-312,925,568.13263,169.689.88NULL 2020-11-303,108,469.22182,901.096.25NULL 2020-12-313,009,964.39-98,504.83-3.17NULL Agora que você aprendeu o que veio buscar, talvez esteja na hora de algo mais? Por exemplo, algumas consultas SQL avançadas que você poderia usar na análise financeira? Você também quer trabalhar em seu crescimento profissional? Acho que é útil saber como calcular o crescimento da receita. Como analista de dados, muitas vezes me pediram para criar relatórios semelhantes ao que lhe mostrei aqui. Estes são dados importantes que são constantemente analisados nos negócios. Agora que você aprendeu a usar as funções LAG() e LEAD(), você é capaz de usá-las em qualquer tipo de dado. Nos negócios, você terá muitas oportunidades para isso. Caso você não tenha uma maneira de praticar as funções de janela SQL - ou se você quiser apenas aprimorar suas habilidades - tomar um curso Funções de Janela (Window Functions) em SQL pode ser uma boa decisão. E se você estiver se perguntando por quê, aqui está um artigo com a resposta à sua pergunta. Tags: sql aprender sql revenue growth