Pular para o conteúdo principal

Declarações CASE no PostgreSQL

Neste tutorial, você aprenderá a escrever consultas condicionais no PostgreSQL usando a expressão condicional CASE do PostgreSQL.
Actualizado 16 de jan. de 2025  · 7 min de leitura

As expressões condicionais são um dos elementos mais fundamentais de qualquer paradigma de programação. As expressões condicionais comuns incluem blocos if-else e casos switch. Você pode formular expressões condicionais no PostgreSQL usando WHEN-THEN case, que é muito semelhante aos blocos if-else. Neste tutorial, você aprenderá como fazer isso.

Antes de começar a escrever consultas de condição, é importante que você configure um banco de dados PostgreSQL local. Você fará isso na primeira seção deste tutorial.

Observação: Para poder acompanhar este tutorial, você precisa conhecer os conceitos básicos de SQL e PostgreSQL. Sinta-se à vontade para atualizar os conceitos básicos com os seguintes recursos:

Configurar um banco de dados PostgreSQL localmente

Você pode usar esse arquivo de backup e restaurá-lo em seu servidor PostgreSQL. Se quiser saber como fazer isso, você pode seguir este artigo. Depois de restaurar o backup com sucesso, você deverá conseguir ver essas tabelas no banco de dados -

  • países
  • route_table
  • station_table
  • train_table

Este tutorial, no entanto, usa apenas a tabela countries. Fique à vontade para explorar as tabelas fornecidas no backup do banco de dados. Além disso, você pode querer formar seus próprios bancos de dados e tabelas. Você já deve ter uma tabela (preenchida com os detalhes sobre os diferentes países do mundo) se tiver restaurado o backup do banco de dados. Vamos agora explorar brevemente a tabela countries.

Explorando o countries tabela muito breve

Após restaurar o banco de dados, você pode visualizar a tabela na interface pgAdmin que vem com a instalação padrão do PostgreSQL. Ao executar um simples comando SELECT, você fica sabendo sobre as colunas, seus tipos de dados e também sobre as linhas que a tabela contém.

banco de dados

A tabela contém detalhes sobre um total de 206 países diferentes de várias regiões do mundo. Quantas regiões exatamente? A consulta abaixo deve dar a você a resposta para a pergunta.

SELECT COUNT(DISTINCT(region)) from countries;

Acontece que há 23 regiões diferentes cobertas nessa tabela, como a Europa Ocidental, a Polinésia, o Oriente Médio e assim por diante. Você pode explorar a tabela com suas próprias perguntas rápidas e, ao longo do caminho, poderá descobrir fatos interessantes. Vamos ver agora a anatomia de um PostgreSQL básico CASE.

Torne-se um engenheiro de dados

Torne-se um engenheiro de dados por meio do aprendizado avançado de Python
Comece a aprender de graça

Introdução ao PostgreSQL CASE

A seguir, você verá a forma geral de um caso do PostgreSQL com o construtor WHEN-THEN -.

CASE
     WHEN condition_1  THEN result_1
     WHEN condition_2  THEN result_2
     ...
     ELSE  result_n
END

Aqui estão alguns pontos críticos que você deve ter em mente ao construir CASEs no PostgreSQL:

  • Cada condição é uma expressão booleana e, com base em sua saída, o resultado é escolhido. Se todas as expressões correspondentes a WHEN forem avaliadas como False, o resultado respectivo à parte ELSE será mostrado. Caso você não especifique a parte ELSE, a consulta retornará nulo.

  • Geralmente, uma condição é aplicada a uma coluna presente na tabela em que você está operando. As construções de consultas condicionais como as mencionadas acima são normalmente feitas com as declarações SELECT. Lembre-se de que a coluna deve estar presente na instrução SELECT da sua consulta, na qual você está especificando as expressões booleanas (em CASE). Mas quando estiver usando CASE em conjunto com uma cláusula where, você não precisará seguir isso (mais sobre isso posteriormente).

  • O tipo de dados dos resultados deve ser uniforme. Você não pode retornar um string em result_1 e um integer em result_2 e assim por diante.

Vamos ver alguns exemplos agora.

Como escrever no PostgreSQL CASEs

Vamos começar de forma simples. Agora você escreverá um CASE para agrupar os países em relação ao ano da independência. Os anos de independência são registrados na coluna indep_year. Digamos que você tenha três grupos de anos de independência dos países que você precisa acompanhar. Você criará três grupos de anos de independência para isso.

  • Antes de 1900 (indep_year < 1900)
  • Entre 1900 e 1930 (indep_year <= 1930)
  • Depois de 1930 (indep_year > 1930)

O resultado final da consulta deve conter as seguintes colunas: - você deve ter uma conta de usuário.

  • nome (do país)
  • continente (ao qual o país pertence)
  • indep_year
  • E o grupo de anos de independência que você criará. Vamos chamar isso de indep_year_group.

Vamos agora escrever a consulta -

SELECT name, continent, indep_year,
    CASE WHEN indep_year < 1900 THEN 'before 1900'
         WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
         ELSE 'after 1930' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

(A consulta é inspirada no curso Joining Data in SQL do DataCamp).

Ao executar a consulta, você verá muitos países, como Palestina, Porto Rico etc., para os quais nenhum ano de independência é fornecido na tabela. Por isso, eles têm o grupo between 1900 and 1930.

O PostgreSQL CASEs pode ter várias condições. Há algumas entradas na tabela em que o nome do país e da capital é o mesmo. Você pode adicionar isso à sua construção anterior CASE -

SELECT name, continent, indep_year,
    CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
         WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
         ELSE 'after 1930_and_no_same_capital' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

Outra coisa interessante sobre CASEs é que você pode combiná-los com funções agregadas como SUM(). Para implementar um CASE com a função de agregação SUM(), você precisará de uma tabela diferente em que isso possa ser uma boa ideia. Vamos criar uma tabela simples chamada student_grades com as seguintes colunas e tipos de dados - você pode criar uma tabela de dados com o nome de .

  • student_name (string)
  • student_stream (string)
  • student_grade (character)

A consulta a seguir cria a tabela para você

CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);

Vamos inserir alguns registros na tabela agora. Você pode fazer isso usando algumas declarações do INSERT. Digamos que, após as inserções, a tabela student_grades agora tenha os seguintes registros -

tabela

Agora, você escreverá um CASE para obter a soma dos alunos que pertencem a determinados grupos de séries. Como você pode ver, de acordo com as instâncias da tabela, há três graus distintos - A, B e C. A consulta condicional deve retornar um resultado semelhante ao seguinte -

tabela

A consulta para este -

SELECT
 SUM (
 CASE
 WHEN student_grade = 'A' THEN
 1
 ELSE
 0
 END
 ) AS "High Scoring",
 SUM (
 CASE
 WHEN student_grade = 'B' THEN
 1
 ELSE
 0
 END
 ) AS "Mid Scoring",
 SUM (
 CASE
 WHEN student_grade = 'C' THEN
 1
 ELSE
 0
 END
 ) AS "Low Scoring"
FROM
 student_grades;

É assim que você pode combinar CASE com funções agregadas para obter fatos interessantes sobre os dados.

Conclusão e leitura adicional

Isso é tudo para este tutorial. Neste tutorial, você aprendeu a incorporar if-then como condicionamento em suas consultas SQL para obter relatórios interessantes. Você trabalhou com vários exemplos para fortalecer essa habilidade. Se estiver procurando exercícios mais desafiadores, você deve fazer os seguintes cursos do DataCamp sobre SQL -

Sinta-se à vontade para me enviar suas perguntas sobre este tutorial por meio da seção Comments.

Torne-se certificado em SQL

Comprove que suas habilidades em SQL estão prontas para o trabalho com uma certificação.
Temas

Cursos de SQL

Certificação disponível

curso

Introdução ao SQL

2 hr
975.9K
Aprenda a criar e consultar bancos de dados relacionais usando SQL em apenas duas horas.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow