AVG / SUM
AVG(table): 平均数
SUM(table): 求和
只对数值有效
NULL不参与运算,需要将NULL考虑为0的情况,用
SUM(x) / COUNT(IFNULL(x,0))
MAX / MIN
MAX(table), MIN(table)
求最值
对于字符串,字典序排序
对于日期,时间先后排序
COUNT
COUNT(table)
指定字段出现的次数
计算表中有多少条纪录:
COUNT(*)
GROUP BY
分组
#eg.查询不同的department_id的平均工资
SELECT department_id AVG(salary)
FROM employees
GROUP BY department_id;
使用多个列分组
#eg.查询不同的department_id, job_id的平均工资
SELECT department_id,job_id AVG(salary)
FROM employees
GROUP BY department_id,job_id;
注意:SELECET中非组函数的字段必须声明在GROUP BY中
GROUP BY声明在FROM, WHERE后面,ORDER BY前面
SELECT department_id,job_id AVG(salary)
FROM employees
GROUP BY department_id; #错误!
GROUP BY ... WITH ROLLUP:最后一行加上对所有数据的操作
HAVING
#eg
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000;
要求:
如果过滤条件中使用了聚合函数,就必须使用
HAVING替换WHERE
HAVING放在GROUP BY后面一般和
GROUP BY一起使用
HAVING和WHRER对比
HAVING适用范围更广WHRER效率更高,HAVING先连接后筛选,WHRER先筛选再连接
附:SQL语句执行顺序
SELECT DISTINCT xxx #5
#----------------
FROM xxx JOIN xxx ON ccc #1
WHERE ccc #2
GROUP BY xxx #3
HAVING xxx #4
#----------------
ORDER BY xxx DESC #6
LIMIT xxx #7
浙公网安备 33010602011771号