작성
·
230
3
안녕하세요! 강의 잘 듣고 있습니다.
AVG(Price) AS avg_price 로 변수를 할당해준 후에 HAVING에 집어넣는 대신에,
GROUP BY 한 후에, 그 아래에 WHERE AVG(Price) >= 100 을 쓰면 안되는 건가요? 반드시 SELECT 에서 변수 할당을 해주어야 하는 건가요?
그렇다면 LIKE를 WHERE과 묶어서 사용하듯이 GROUP BY는 HAVING과 무조건 같이 간다고 생각하면 될까요 ? ㅠㅠ
답변 2
3
안녕하세요 정수민님
질문 내용에 여러가지 포인트가 섞여있어서 먼저 제가 질문 이해한게 맞는 지 확인해주시면 좋을 것 같아요
1. HAVING은 반드시 GROUP BY와 함께 사용되는지
2. GROUP BY 이후에 HAVING 대신 WHERE를 사용하면 안되는지
3. SELECT 문에서 AVG(Price)를 넣지 않고 GROUP BY 이후 조건을 걸어줄 수는 없는지
제가 이해한 질문의 요지는 위와 같은데요. 혹시 잘못 이해한 부분이 있다면 추가 질문 부탁드리고, 위 세가지에 대해 답변 드리겠습니다.
1번) 네, HAVING은 반드시 GROUP BY와 함께 사용해야 합니다.
2번) SQL 내부 실행 순서에 따라 WHERE -> (GROUP BY -> HAVING) 순서로 쿼리가 실행됩니다. 때문에 GROUP BY 이후에는 WHERE 를 사용할 수 없고 반드시 HAVING을 사용해주셔야 합니다.
3번) 할 수는 있습니다만 권장드리지는 않습니다.
SELECT문에서 사용한 AVG(Price) AS avg_price는 우리가 뽑아내고 싶었던 결과를 눈에 보이게 출력하기 위해 출력값을 지정해 준 부분이구요. HAVING에서 사용되는 AVG(Price) >= 100은 GROUP BY 된 데이터에서 AVG(Price)가 100이상인 데이터만 필터링하기 위해 사용하는 조건입니다. AVG(Price)라는 같은 연산 값을 사용하고 있지만 엄밀히 말하자면 SELECT에 있는 것을 HAVING에서 가져다 썼다고는 볼 수 없습니다.
그래서 만약 SELECT 절에 정의해준 AVG(Price)를 굳이 빼고싶다고 하시면 빼실 수는 있는데요. 조건이 잘 걸렸는지 확인 하기 위해서는 SELECT에 조건으로 걸어주었던 변수를 넣어주는 것이 좋겠죠? :)
1,2번 질문의 경우 해당 강의 11분 35초 이후 내용에 자세히 설명되어있는 부분이라 혹시 이해가 잘 안가신다면 해당 부분 다시 한번 들어보시는 것을 추천드려요!
번외이지만 LIKE의 경우 HAVING에서도 사용할 수 있는 조건이기 때문에 WHERE과 묶어서 사용한다고 생각하시기 보다는 조건을 필터링 할때 사용하는 구문이구나 생각해주시면 더 정확할 것 같습니다 :)
추가 질문 있으시면 언제든지 질문해주세요.
감사합니다.
0