首页 新闻 搜索 专区 学院

mysql中 groupBy、where、order执行顺序

0
[待解决问题]

求解mysql中 groupBy、where、order、having、leftJoin、聚合函数(sum、count等)的执行先后顺序

一步棋的主页 一步棋 | 菜鸟二级 | 园豆:233
提问于:2020-01-18 22:06
< >
分享
所有回答(2)
0

聚合>leftJoin>where > groupBy>having>order,你可以看看我博客数据库这个分类

小小咸鱼YwY | 园豆:1808 (小虾三级) | 2020-01-19 09:38

请问您说聚合函数是最先执行的,那为什么select后边聚合函数执行后给列起的别名在where中是用不了?

支持(0) 反对(0) 一步棋 | 园豆:233 (菜鸟二级) | 2020-01-19 15:16

@一步棋: https://www.cnblogs.com/pythonywy/p/11196859.html

支持(0) 反对(0) 小小咸鱼YwY | 园豆:1808 (小虾三级) | 2020-01-19 17:36
0

where只是对现有数据的过滤. 你sum了几行的数据, 在用where筛选. 意味这这行sql要产生两张临时表. 所以不容许.
一般是 select xxx from (select sum(xx) as x1 from table) as t1 where x1>110
这样子的

风中的雪糕 | 园豆:418 (菜鸟二级) | 2020-01-19 21:50

mysql是不是where、groupBy等每筛选一次都会产生临时表?
你能不能帮我看一下下边的sql(我随便写的)产生了几个临时表?在什么时候产生的?DATE_FORMAT,SUM什么时候执行的?
麻烦了
SELECT DATE_FORMAT(t.createdtime, '%Y-%m-%d') AS ct,SUM(t.actualPayment) AS revenue
FROM orders t
WHERE t.createdtime BETWEEN DATE_SUB('2019-12-31',INTERVAL 7 DAY) AND '2019-12-31'
GROUP BY ct HAVING COUNT(t.createdtime)>1
ORDER BY ct

支持(0) 反对(0) 一步棋 | 园豆:233 (菜鸟二级) | 2020-01-19 22:32

@一步棋: HAVING 只能 对现有字段进行过滤吧... COUNT(t.createdtime) 应该在where前有.
BETWEEN 我用的老有问题, 你最好是拆成两个条件用,

支持(0) 反对(0) 风中的雪糕 | 园豆:418 (菜鸟二级) | 2020-01-19 22:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册