聚合函数+SQL语句执行顺序

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一起使用

HAVINGWHRER对比

  • 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
posted @   nosuchpgmr  阅读(212)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
主题色彩