Kodokon kodokon.com

聚合:COUNT、SUM、AVG、MIN/MAX 与 GROUP BY

使用聚合函数和 GROUP BY 计算总和、平均值以及分组统计。

8 分钟 · 3 题

在 Kodokon 中打开本课

聚合函数以多行作为输入,返回单个值:一个总和、一个平均值、一个最小值……最简单的是 COUNT(*),它用来统计行数。它能自然地和 WHERE 结合:数据库先筛选,然后再统计。

SQL
SELECT COUNT(*) FROM books;

SELECT COUNT(*) FROM books WHERE genre = 'sf';
总共 7 本书,其中 4 本是科幻

其他几个必备的聚合函数作用于某一列:SUM(price) 求和,AVG(price) 计算平均值,MIN(year)MAX(year) 找出最小值和最大值。AS 关键字给出一个别名,也就是给计算出的列一个易读的名字。

SQL
SELECT SUM(price) AS total FROM books;

SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';

SELECT MIN(year), MAX(year) FROM books;
总和:52.4;sf 平均值:8.375;1888 和 1965

那要获得按类别的统计呢?这正是 GROUP BY 的作用:数据库把拥有相同值的行分到一组(这里是 genre),然后对每一组应用聚合函数。结果里每一组占一行。

SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf:4 本书;aventure:2 本;conte:1 本

知识检测

确认你已牢记本课的重点内容。

  1. SELECT COUNT(*) FROM books; 会返回什么?
    • 表中的列数
    • 表中的行数
    • 所有书的列表
  2. 哪个函数计算书的平均价格?
    • SUM(price)
    • AVG(price)
    • MEAN(price)
    • MAX(price)
  3. SELECT genre, COUNT(*) FROM books GROUP BY genre; 会产生什么?
    • 每本书一行,带上它的 genre
    • 单独一行,带上书的总数
    • 每个 genre 一行,带上该 genre 的书的数量