本文概述
- 在本地设置PostgreSQL数据库
- 非常简短地浏览国家表
- PostgreSQL CASE简介
- 编写PostgreSQL案例
- 结论和进一步阅读
开始编写条件查询之前, 重要的是建立一个本地PostgreSQL数据库。你将在本教程的第一部分中进行此操作。
注意:为了能够跟随本教程的学习, 你需要了解SQL和PostgreSQL的基础知识。随时使用以下资源刷新基础知识:
- PostgreSQL初学者指南
- srcmini的SQL for Data Science简介
- 国家
- route_table
- station_table
- train_table
非常简短地浏览国家表 恢复数据库后, 你可以在PostgreSQL的默认安装随附的pgAdmin界面中查看该表。运行简单的SELECT语句后, 你将了解列, 其数据类型以及表包含的行-
文章图片
该表包含有关来自世界各地的206个不同国家的详细信息。到底有几个地区?以下查询将为你提供问题的答案。
SELECT COUNT(DISTINCT(region)) from countries;
事实证明, 此表涵盖了23个不同的区域, 例如西欧, 波利尼西亚, 中东等。你可以使用自己的快速问题来探索表格, 在此过程中, 你可能会发现有趣的事实。现在让我们看一下基本PostgreSQL案例的剖析。
PostgreSQL CASE简介 下面介绍了带有WHEN-THEN构造的PostgreSQL案例的一般形式-
CASE
WHEN condition_1THEN result_1
WHEN condition_2THEN result_2
...
ELSEresult_n
END
在PostgreSQL中构造CASE时, 应牢记以下关键点:
- 每个条件都是一个布尔表达式, 并根据其输出选择结果。如果将与WHEN对应的所有表达式都评估为False, 则显示与ELSE部分相对应的结果。如果你没有指定ELSE部分, 查询将返回null。
- 条件通常会应用于你要处理的表中存在的列。像上面这样的条件查询构造通常是使用SELECT语句完成的。请记住, 该列必须出现在查询的SELECT语句中, 在该语句中你要指定布尔表达式(在CASE中)。但是, 当你将CASE与where子句结合使用时, 则无需遵循此规则(稍后会对此进行详细介绍)。
- 结果的数据类型必须统一。你不能在result_1中返回字符串, 而在result_2中返回整数, 依此类推。
编写PostgreSQL案例 让我们开始简单。现在, 你将编写一个CASE来对独立年进行国家分组。独立年份记录在indep_year列中。假设你需要遵循三个国家的独立年。为此, 你将创建三组独立年-
- 1900年之前(indep_year < 1900)
- 1900年至1930年之间(indep_year < = 1930)
- 1930年之后(印度年> 1930)
- 国家名称
- 大陆(国家所属)
- 独立年
- 还有你将创建的独立年小组。让我们将其命名为indep_year_group。
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;
(该查询的灵感来自srcmini的SQL中的Joining Data课程。)
执行查询后, 你会看到许多国家(如巴勒斯坦, 波多黎各等)在表中未提供独立年。因此, 他们进入了1900年至1930年的小组。
PostgreSQL案例可以有多个条件。该表中有几个条目, 其中国家和首都的名称相同。你可以将其添加到以前构建的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;
CASE的另一个令人兴奋的事情是, 你可以将它们与SUM()之类的聚合函数配对。要使用聚合函数SUM()实现CASE, 你将需要一个不同的表, 这可能是个好主意。让我们创建一个简单的表, 名称为student_grades, 该表具有以下列和数据类型-
- student_name(字符串)
- student_stream(字符串)
- student_grade(字符)
CREATE TABLE student_grades
(student_name character varying, student_stream character varying, student_grade character);
现在将一些记录插入表中。你可以使用一些INSERT语句执行此操作。假设在插入之后, 表格student_grades现在具有以下记录-
文章图片
现在, 你将编写一个CASE以获取属于某些年级组的学生的总和。如你所见, 根据表的实例, 存在三种不同的等级-A, B和C。条件查询应返回类似于以下内容的输出-
文章图片
查询此-
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;
这是将CASE与聚合函数配对以得出有关数据的有趣事实的方法。
结论和进一步阅读 这就是本教程的全部内容。在本教程中, 你学习了如何将if-then像条件那样合并到SQL查询中, 以生成有趣的报告。你通过几个示例来增强此技能。如果你正在寻找更具挑战性的练习, 则应该参加以下有关SQL的srcmini课程-
- 中级SQL
- 用于探索性数据分析的SQL
- 用SQL报告
推荐阅读
- 电子表格中的图形
- 电子表格中的数据透视表
- R中的SQLite用法权威介绍
- SQL中的清理数据
- 如何在电子表格中进行加,减,除和乘运算
- 电子表格中的条件格式
- PostgreSQL中的实例化视图
- Python中的参数解析
- win7如何显示隐藏文件? 本文教您显示办法