聚合查询

通常,聚合函数会对NULL以外的对象进行汇总。但是只有COUNT函数例外,使用 COUNT(*)可以查出包含 NULL 在内的全部数据的行数。

SELECT
    count(*)
FROM
    product;
-- 返回8

SELECT
    count(purchase_price)
FROM
    product;
-- 返回6

SELECT
    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子 句可以非常方便地实现上述要求。

你可能感兴趣的:(聚合查询)