FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. 쓰는 순서와 실행 순서가 다르다.
왜 그런지까지
SELECT 절이 거의 마지막에 실행되기 때문에, SELECT 에서 붙인 별칭(alias)을 WHERE 에서는 쓸 수 없다. 반면 ORDER BY 는 SELECT 다음이라 별칭을 쓸 수 있다.
또 WHERE 는 그룹으로 묶기 전에 행을 걸러 내고, HAVING 은 묶은 뒤의 그룹을 걸러 낸다. 그래서 집계 함수 조건은 HAVING 에 써야 한다.
쓰는 순서와 실행 순서
| 쓰는 순서 | 실행 순서 |
|---|---|
| SELECT | 5 |
| FROM | 1 |
| WHERE | 2 |
| GROUP BY | 3 |
| HAVING | 4 |
| ORDER BY | 6 |
WHERE vs HAVING
WHERE 는 묶기 전에 행을 거르고 집계 함수를 쓸 수 없다. HAVING 은 묶은 뒤 그룹을 거르고 집계 함수를 쓸 수 있다.
별칭을 쓸 수 있는 곳
ORDER BY 는 SELECT 다음에 실행되어 별칭을 쓸 수 있지만, WHERE·GROUP BY·HAVING 은 그 전이라 쓸 수 없다.
넣어 두면 오늘 · 1일 · 3일 · 7일 · 14일 · 30일 간격으로 다시 물어봅니다