curso
Declarações CASE no PostgreSQL
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.
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
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 CASE
s 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 comoFalse
, o resultado respectivo à parteELSE
será mostrado. Caso você não especifique a parteELSE
, 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çãoSELECT
da sua consulta, na qual você está especificando as expressões booleanas (emCASE
). Mas quando estiver usandoCASE
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
emresult_1
e uminteger
emresult_2
e assim por diante.
Vamos ver alguns exemplos agora.
Como escrever no PostgreSQL CASE
s
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 CASE
s 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 CASE
s é 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 -
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 -
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
Cursos de SQL
curso
SQL intermediário
curso