求解mysql中 groupBy、where、order、having、leftJoin、聚合函数(sum、count等)的执行先后顺序
聚合>leftJoin>where > groupBy>having>order,你可以看看我博客数据库这个分类
请问您说聚合函数是最先执行的,那为什么select后边聚合函数执行后给列起的别名在where中是用不了?
@一步棋: https://www.cnblogs.com/pythonywy/p/11196859.html
where只是对现有数据的过滤. 你sum了几行的数据, 在用where筛选. 意味这这行sql要产生两张临时表. 所以不容许.
一般是 select xxx from (select sum(xx) as x1 from table) as t1 where x1>110
这样子的
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
@一步棋: HAVING 只能 对现有字段进行过滤吧... COUNT(t.createdtime) 应该在where前有.
BETWEEN 我用的老有问题, 你最好是拆成两个条件用,