해결된 질문
작성
·
139
·
수정됨
답변 3
1
1
서현님 안녕하세요! 잘 학습하고 계시네요!
말씀하신 것처럼 where 쿼리 문에서는 GROUP BY가 있어야 실행이 가능합니다. 강의에서는 WHERE과 HAVING을 비교드리기 위해 사용했는데, WHERE 설명을 할 때 GROUP BY가 있으면 헷갈릴 수 있어 제외했는데 이 부분은 수정을 하거나 들 ㄴ예시를 쓰는게 좋을수도 있겠네요. 전해드리고 싶었던 핵심은 FROM에서 바로 조건을 건다!입니다
HAVING의 경우 그룹화 기준 컬럼과 COUNT 컬럼을 사용할 수 있습니다.
col1, col2, 그리고 col1의 ROW를 count하겠다!라는 의미가 되어요
아래 샘플 데이터를 만들었어요. 실행해보시면 실행이 되어요
WITH sample_data AS (
SELECT 'A' AS col1, 'X' AS col2, 1 AS col3 UNION ALL
SELECT 'A', 'X', 2 UNION ALL
SELECT 'A', 'X', 3 UNION ALL
SELECT 'A', 'Y', 4 UNION ALL
SELECT 'B', 'X', 5 UNION ALL
SELECT 'B', 'X', 6 UNION ALL
SELECT 'B', 'Y', 7 UNION ALL
SELECT 'B', 'Y', 8 UNION ALL
SELECT 'B', 'Y', 9 UNION ALL
SELECT 'C', 'Z', 10
)
SELECT
col1,
col2,
COUNT(col1) AS col1_count
FROM sample_data
GROUP BY col1, col2
HAVING COUNT(col1) > 3;
또 궁금한 내용이 있으시면 말씀해주세요! 감사합니다
0
정성스럽고 빠른 답변 감사드려요!
2번째 having에서의 질문은 group by의 컬럼과 count()안에 있는 컬럼이 같을 수 있는지에 대한 질문이었어요!
‘특정 컬럼 기준으로 모으면서 다른 컬럼에서 집계 가능’하다고 배웠던 것 같은데, 그룹화 기준 컬럼과 집계하는 컬럼이 같을 수도 있는 건지 궁금해서 다시 여쭤봅니다!
네 예시로 드린 것처럼 group by의 컬럼과 count() 안에 컬럼이 같을 수 있고, 실행이 되어요.
실행에는 문제가 없으나, 특정 집계 함수에선 집계를 해도 의미없는 결과가 나올수도 있지요
위 쿼리도 정상적으로 실행이 됩니다
결과는 다음과 같이 나옵니다
결과가 나오지만, col3과 SUM(col3)이 결과가 동일해서 목적에 따라서는 애매할 수도 있지요. 그러나 제가 최초에 알려드린 COUNT를 사용한 쿼리는 세는 것이라서 괜찮습니다.
결론적으로 말씀드리면, 다른 컬럼에서 집계 가능이라고 말씀드렸지만 동일한 컬럼을 사용할 수 있습니다.
보통은 다른 컬럼을 집계하는 경우가 많지만, COUNT 같은 경우엔 같은 컬럼을 사용하기도 합니다. WHERE, HAVING 비교 예시에선 큰 의미를 두지 않고 col1을 사용했어요. HAVING 파트에서 핵심은 HAVING은 GROUP BY를 한 후에 생기는 컬럼에 조건을 설정한다입니다. 이 부분 위주로 보시면 될 것 같아요