聚合函数
在mysql里面有一些自带的函数供我们对数据进行聚合并导出一个单一值
例如:
MAX()
MIN()
AVG()
SUM()
COUNT()
select MAX(invoice_total)
from invoices
注意,聚合函数只运行非空值;若存在空值在列中,聚合函数并不会计算
对于函数内的,也可以是表达式,聚合函数运行的顺序是先运行括号里的表达式,再根据函数的意义来进行操作
如果采用了对数据进行筛选,那么首先会对数据进行筛选,之后再对数据进行函数运算
GROUP BY
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
我们通过聚合函数的计算,可以通过group by
来对不同的行进行统计
select
client_id,
sum(invoice_total) as total_sales
from invoices
where invoice_date >= '2019-01-01'
group by client_id
order by total_sales desc
注意:要注意不同关键字的调用顺序
select
from
where
group by
order by
HAVING
HAVING
能使数据在group分组后,对分组后的行进行筛选数据
select
client_id,
sum(invoice_total) as total
from invoices
-- where total > 500 这是不能用的,因为我们这时候还没有对其进行分组,并没有total这一列
group by client_id
having total_sales > 500
WITH ROllUP
mysql特有
用来汇总数据,只会对应用了聚合值的列
select
pm.name as payment_method,
SUM(amount)
from payments p
join payment_methods pm
on p.payment_method = pm.payment_method_id
group by pm.name with rollup -- 如果这里by后面使用了别名,在第一列最后一行也就是汇总的那一行就会出现名字,就不符合rollup实际的意义了