Day42|Day42 - 2018-05-16
PostgreSQL
数据聚合
NULL
NULL 是一种数据类型,表示 SQL 中没有数据,它们经常在聚合函数中被忽略了。在 WHERE 条件中表示 NULL 时,我们写成 IS NULL 或 IS NOT NULL。我们不使用 =,因为 NULL 在 SQL 中不属于值。但是它是数据的一个属性。
在以下两种常见情况下,你可能会遇到 NULL:
- 在执行 LEFT JOIN 或 RIGHT JOIN 时,NULL 经常会发生。左侧表格中的某些行在做连接时与右侧表格中的行如果不匹配,这些行在结果集中就会包含一些 NULL 值。
- NULL 也可能是因为数据库中缺失数据。
SELECT COUNT(*) FROM accounts;
查询accounts表中记录的数目与 COUNT 不同,你只能针对数字列使用 SUM,求出数据的和。但是,SUM 将忽略 NULL 值,其他聚合函数也是这样。重要注意事项:聚合函数只能垂直聚合,即聚合列的值。如果你想对行进行计算,可以使用简单算术表达式。
从功能上来说,MIN 和 MAX 与 COUNT 相似,它们都可以用在非数字列上。MIN 将返回最小的数字、最早的日期或按字母表排序的最之前的非数字值,具体取决于列类型。MAX 则正好相反,返回的是最大的数字、最近的日期,或与“Z”最接近(按字母表顺序排列)的非数字值。
与其他软件类似,AVG 返回的是数据的平均值,即列中所有的值之和除以列中值的数量。该聚合函数同样会忽略分子和分母中的 NULL 值。
GROUP BY GROUP BY 可以用来在数据子集中聚合数据。例如,不同客户、不同区域或不同销售代表分组。
SELECT 语句中的任何一列如果不在聚合函数中,则必须在 GROUP BY 条件中。
GROUP BY 始终在 WHERE 和 ORDER BY 之间。
ORDER BY 有点像电子表格软件中的 SORT。
在深入了解如何使用 GROUP BY 语句聚合函数之前,需要注意的是,SQL 在 LIMIT 条件之前评估聚合函数。如果不按任何列分组,则结果是 1 行,没有问题。如果按照某列分组,该列中存在大量的唯一值,超出了 LIMIT 上限,则系统会照常计算聚合结果,但是结果中会忽略某些行。
【Day42|Day42 - 2018-05-16】DISTINCT 去重你可以将 DISTINCT 看做仅返回特定列的唯一值的函数。需要注意的是,在使用 DISTINCT 时,尤其是在聚合函数中使用时,会让查询速度有所减慢。
推荐阅读
- 8.|8. PostgreSQL逻辑结构(2)——表
- 认识PostgreSQL|认识PostgreSQL WAL(1)
- Kubernetes|Kubernetes stateful set讲解以及一个基于postgreSQL的具体例子
- 近期写PostgreSql的笔记
- TDSQL | DTS for PostgreSQL 逻辑复制详解
- TDSQL PostgreSQL 执行计划详解
- TDSQL-C PostgreSQL 版的高可用特性
- RadonDB PostgreSQL on K8s 2.1.0 发布!
- MogDB与PostgreSQL分区策略语法测试
- django.db.backends.postgresql' isn't an available database backend.解决方法