我在MySQL相当新手在学习GROUP BY/HAVING我面对这个查询:MySQL首先执行什么操作:SELECT或HAVING?
SELECT author_id, COUNT(author_id) FROM posts GROUP BY author_id HAVING COUNT(author_id) > 2;
我发现关于SQL的执行顺序的物品,其表示,序列如下:
FROM子句 - > WHERE子句 - > GROUP BY子句 - > HAVING子句 - > SELECT子句 - > ORDER BY子句
但是,如果是这样,下一个查询如何成功执行?
SELECT author_id, COUNT(author_id) AS posts_count
FROM posts
GROUP BY author_id
HAVING posts_count > 2;
如何HAVING
知道 “POSTS_COUNT” 的别名,如果SELECT
HAVING
后执行?我发现的信息是不正确的还是这是某种与SQL标准不同的MySQL特定行为?
而且,如果HAVING
使用从SELECT
“posts_count
”的别名在第二个查询,我可以做一个野生猜测,HAVING
将不再运行COUNT()
筛选组,将只取“POST_COUNT”列必要的数据。但是,HAVING
会在第一个查询中做同样的事情,还是会为每个组运行COUNT()
两次(SELECT
中的第一个和HAVING
中的第一个),从而使查询执行时间更长?
我很抱歉可能调用一些事情错了名字,我只在我的MySQL学习:)
谢谢你的解释,这正是我一直在寻找! – Eyeless