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 也可能是因为数据库中缺失数据。
COUNT 不会考虑具有 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 时,尤其是在聚合函数中使用时,会让查询速度有所减慢。

    推荐阅读