Artigo
· Dez. 4, 2023 4min de leitura

5 funções SQL úteis para elevar suas habilidades de SQL a um novo patamar

Olá, comunidade,

Neste artigo, listei 5 funções SQL úteis com explicações e exemplos de consultas👇🏻

Estas são as 5 funções:

  • COALESCE
  • RANK
  • DENSE_RANK
  • ROW_NUMBER
  • Função para obter totais correntes

Vamos começar com a função COALESCE

#COALESCE

A função COALESCE avalia uma lista de expressões na ordem da esquerda para a direita e retorna o valor da primeira expressão que não é NULL. Se todas as expressões forem avaliadas como NULL, é retornado NULL.

A declaração a seguir retorna o primeiro valor que não é nulo, ou seja, "intersystems"

SELECT COALESCE(NULL, NULL, NULL,'intersystems', NULL,'sql')

Vamos criar a tabela abaixo como outro exemplo

CREATE TABLE EXPENSES(
    TDATE     DATE NOT NULL,
    EXPENSE1   NUMBER NULL,
    EXPENSE2   NUMBER NULL,
    EXPENSE3   NUMBER NULL,
    TTYPE  CHAR(30) NULL)

Agora vamos inserir alguns dados falsos para testar nossa função

 INSERT INTO sqluser.expenses (tdate, expense1,expense2,expense3,ttype )  
  SELECT {d'2023-01-01'}, 500,400,NULL,'Present'
  UNION ALL
  SELECT {d'2023-01-01'}, NULL,50,30,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-01'}, NULL,NULL,30,'Clothes' 
  UNION ALL
  SELECT {d'2023-01-02'}, NULL,50,30 ,'Present'
  UNION ALL
  SELECT {d'2023-01-02'}, 300,500,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-02'}, NULL,400,NULL,'Clothes'   
  UNION ALL
  SELECT {d'2023-01-03'}, NULL,NULL,350 ,'Present'
  UNION ALL
  SELECT {d'2023-01-03'}, 500,NULL,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-04'}, 200,100,NULL,'Clothes'
  UNION ALL
  SELECT {d'2023-01-06'}, NULL,NULL,100,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-06'}, NULL,100,NULL,'Clothes'  

Selecione os dados

Agora, usando a função COALESCE, vamos recuperar o primeiro valor que não é NULL nas colunas expense1, expense2 e expense3

SELECT TDATE,
COALESCE(EXPENSE1,EXPENSE2,EXPENSE3),
TTYPE
FROM sqluser.expenses ORDER BY 2   

Funções #RANK x DENSE_RANK x ROW_NUMBER

  • RANK()— atribui um número inteiro de classificação a cada coluna no mesmo frame de janela, começando em 1. Os números inteiros de classificação podem incluir valores duplicados se várias linhas tiverem o mesmo valor para o campo de função da janela.
  • ROW_NUMBER() — atribui um número inteiro sequencial exclusivo a cada linha no mesmo frame de janela, começando em 1. Se várias linhas tiverem o mesmo valor para o campo de função da janela, cada linha receberá um número inteiro sequencial único.
  • DENSE_RANK() não deixa lacunas após uma classificação duplicada.

No SQL, há várias maneiras de atribuir uma classificação a uma linha, que vamos analisar com um exemplo. Considere novamente o mesmo exemplo acima, mas agora queremos saber quais são as despesas mais altas.

Queremos saber onde eu gasto mais dinheiro. Há diferentes maneiras de fazer isso. Podemos usar todas as ROW_NUMBER() , RANK() e DENSE_RANK() . Vamos ordenar a tabela anterior usando todas as três funções e ver quais são as principais diferenças entre elas usando a seguinte consulta:

Confira nossa consulta abaixo:

A principal diferença entre as três funções é a forma como lidamos com os vínculos. Vamos analisar mais a fundo as diferenças:

  • ROW_NUMBER()retorna um número único para cada linha começando em 1. Quando há vínculos, ele atribui arbitrariamente um número se o segundo critério não estiver definido.
  • RANK()retorna um número único para cada linha começando em 1, exceto quando há vínculos, porque ele atribui o mesmo número. Além disso, uma lacuna segue a classificação duplicada.
  • DENSE_RANK() não deixa lacunas depois de uma classificação duplicada.

#Calculando totais correntes

O total corrente é provavelmente uma das funções de janela mais úteis, principalmente quando você quer visualizar o crescimento. Usando uma função de janela com SUM(), podemos calcular uma agregação cumulativa.

Para fazer isso, só precisamos somar uma variável usando o agregador SUM() , mas ordenar essa função usando uma coluna TDATE. 

É possível observar esta consulta correspondente:

Como você pode observar na tabela acima, agora temos a agregação acumulada da quantidade de dinheiro gasto conforme passam as datas.

 

Conclusão

O SQL é ótimo. As funções usadas acima podem ser úteis ao lidar com análise de dados, ciência de dados e qualquer outro campo relacionado a dados.

Por isso, você deve continuar a melhorar suas habilidades de SQL.


Obrigado

Discussão (0)1
Entre ou crie uma conta para continuar