我在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