聚合查询

通常,聚合函数会对NULL以外的对象进行汇总。但是只有COUNT函数例外,使用 COUNT(*)可以查出包含 NULL 在内的全部数据的行数。
SELECT count(*) FROM product; -- 返回8SELECT count(purchase_price) FROM product; -- 返回6SELECT COUNT(*), COUNT(col_1) FROM NullTbl; -- 返回3,0 这里很独特的是COUNT(*)返回所有行数,COUNT(col_1)的时候,返回的是不包含NULL的行的数量。

GROUP BY
SELECT product_type, count(*) FROM product GROUP BY product_type; SELECT purchase_price, -- 这个也会返回NULL的个数 count(*) FROM product GROUP BY purchase_price;

与聚合函数和GROUP BY子句有关的常见错误 常见错误1 ——在 SELECT 子句中书写了多余的列 使用聚合函数时,SELECT 子句中只能存在以下三种元素。
  • 常数
  • 聚合函数
  • GROUP BY子句中指定的列名(也就是聚合键)
常见错误2 ——在GROUP BY子句中写了列的别名
SELECT product_type AS pt, COUNT(*) FROM Product GROUP BY pt;

【聚合查询】上述语句发生错误的原因之前已经介绍过了,是 SQL 语句在 DBMS 内部的执行顺序造成的——SELECT子句在GROUP BY子句之后执行。 在执行GROUP BY子句时,SELECT子句中定义的别名,DBMS还并不知道。
常见错误3 —— GROUP BY子句的结果能排序吗 GROUP BY 子句结果的显示是无序的。
常见错误4 ——在 WHERE 子句中使用聚合函数
SELECT product_type, COUNT(*) FROM Product WHERE COUNT(*) = 2 GROUP BY product_type;

实际上,只有 SELECT 子句和 HAVING 子句(以及之后将要学到的 ORDER BY子句)中能够使用COUNT等聚合函数。并且,HAVING子 句可以非常方便地实现上述要求。

    推荐阅读