本文共 1576 字,大约阅读时间需要 5 分钟。
AVG([DISTINCT|all] expr):计算多行expr的平均值,数据类型:数值型。
DISTINCT:不计算重复值;all(省略时效果相同):需要计算重复值。
COUNT(*|[DISTINCT|all]expr,[expr...]):计算多行expr的总条数
MAX(expr)、MIN(expr):计算多行expr的最值
SUM([DISTINCT|all] expr):多行expr的总和,数据类型:数值型
# 多行expr的平均值
SELECT
AVG(ALL `level`)
FROM
student;
#COUNT,多行expr的总条数,不考虑null
SELECT
# COUNT(*) # 表中记录条数
# COUNT(DISTINCT `level`) # level列有多少个不同的值
COUNT(DISTINCT age, `level`) # age、level不为null,且不同时相等的行数
# COUNT(DISTINCT*)# DISTINCT和*不能共用,会报异常
FROM
student;
# SUM(expr)
SELECT
# SUM(`level`) # `level`数值列的和
# expr是常量2,所以每行值都相同
# so近似理解为行数的2倍,即n*COUNT(*)
# SUM(2)
SUM(DISTINCT 2) #每行都是2,再去重,故值为2
FROM
student;
# MAX(expr)、Min()
SELECT
MAX(id) #id列的最大值9
FROM
student;
# 统计时对null的处理
SELECT
AVG(IFNULL(`level`,0)) #不仅仅是简单的赋值,还增加了计算的列数
FROM
student;
# GROUP BY显式分组,多列参数同时相等才算一组
# null也算一组
SELECT
NAME,
# name显示的是当前组的第一个字段(与升降序无关)
sex,
`level`,
COUNT(*)
FROM
student
GROUP BY
# `level` DESC; # 降序
LEVEL,
sex;
# having过滤组
SELECT
sex,
LEVEL,
COUNT(*)
FROM
student
GROUP BY
sex # 按sex分组
HAVING
# 要求不重复level数量大于等于3的组(此处结果只有女生组)
count(DISTINCT `level`)>=3;
转载地址:http://eswbm.baihongyu.com/