函数简述

MAX() 求该列中的最大值
MIN() 求该列中的最小值
AVG() 求该列的平均值
SUM() 求该列的值之和
COUNT() 统计该列中有多少条记录
  1. 所有聚合函数只计算非空值。
  2. 不能用于WHERE子句
    (因为聚合函数是对已确定的数据集进行处理,而WHERE子句属于还在确定的阶段)

GROUP BY子句

根据一定的规则,进行分组,以by后面跟着的一个或多个字段进行分组

  1. 格式:select 聚合函数(字段1),字段2 from 表名 where 条件 group by 字段2,字段3
1
2
3
4
5
6
7
SELECT 
p.date,
pm.name payment_method,
SUM(amount) total_payments
FROM payments p, payment_methods pm
WHERE p.payment_method = pm.payment_method_id
GROUP BY date, name;
  1. 通过HAVING子句过滤分组后的数据
    格式:select 聚合函数(字段1),字段2 from 表名 where 条件 group by 字段2,字段3 having 过滤条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
c.customer_id,
c.first_name,
c.last_name,
SUM(oi.quantity * oi.unit_price) AS total_sales
FROM customers c
JOIN orders o USING(customer_id)
JOIN order_items oi USING(order_id)
WHERE state = 'VA'
GROUP BY
c.customer_id,
c.first_name,
c.last_name
HAVING total_sales>100;

ROLLUP 运算符

用于计算总和,但只能用于聚合值的列,且使用时,GROUP BY 后的字段不能用别名
注:ROLLUP只适用于Mysql

1
2
3
4
5
6
7
SELECT 
name payment_method,
SUM(p.amount) total
FROM payments p
JOIN payment_methods pm
ON p.payment_method = pm.payment_method_id
GROUP BY name WITH ROLLUP