聚合查询

通常,聚合函数会对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子 句可以非常方便地实现上述要求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 1,343评论 0 7
  • 前言 读《sql必知必会 第四版》随手做的笔记,写的比较乱,可读性并不好,读的是中文版,翻译过来的感觉有点怪怪的。...
    _老徐_阅读 651评论 0 0
  • (1)、自身的问题; 自身的形象,气质,气度存在一些问题, 谈话要捕捉到关键点,再在自己擅长的地方去谈,掌控整个谈...
    笑曰阅读 216评论 0 0
  • 陪孩子画画去了
    糖月阳阅读 238评论 0 2
  • “如果我有权力,我会封闭每一个供应免费餐点的慈善团体。它使我们国家堕落和沉沦,因为它鼓励懒惰、游手好闲、伪善,甚至...
    笑世可楠阅读 804评论 0 1