2-5 where과 having 예시 쿼리문에 대한 질문
pdf파일 158페이지, 159페이지에 있는 where과 having 쿼리 예시문을 보다가 궁금한 게 생겨서요.
where 쿼리문 : select 컬럼 1, 컬럼2라고 돼 있는데 group by 컬럼1, 컬럼2 라고 하지 않아도 실행이 가능한가요?
having 쿼리문 : group by하는(그룹화 기준) 컬럼과 count 컬럼이 같을 수도 있나요? count (컬럼3)이어야 하지 않는지 궁금합니다!
답변 3
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()안에 있는 컬럼이 같을 수 있는지에 대한 질문이었어요!
‘특정 컬럼 기준으로 모으면서 다른 컬럼에서 집계 가능’하다고 배웠던 것 같은데, 그룹화 기준 컬럼과 집계하는 컬럼이 같을 수도 있는 건지 궁금해서 다시 여쭤봅니다!
1
네 예시로 드린 것처럼 group by의 컬럼과 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,
col3,
SUM(col3) AS col3_sum
FROM sample_data
GROUP BY col1, col3
위 쿼리도 정상적으로 실행이 됩니다
결과는 다음과 같이 나옵니다
col1 col3 col3_sum
A 1 1
A 2 2
A 3 3
A 4 4
B 5 5
B 6 6
B 7 7
B 8 8
B 9 9
C 10 10
결과가 나오지만, col3과 SUM(col3)이 결과가 동일해서 목적에 따라서는 애매할 수도 있지요. 그러나 제가 최초에 알려드린 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,
col3,
COUNT(col3) AS col3_count
FROM sample_data
GROUP BY col1, col3
col1 col3 col3_count
A 1 1
A 2 1
A 3 1
A 4 1
B 5 1
B 6 1
B 7 1
B 8 1
B 9 1
C 10 1
결론적으로 말씀드리면, 다른 컬럼에서 집계 가능이라고 말씀드렸지만 동일한 컬럼을 사용할 수 있습니다.
보통은 다른 컬럼을 집계하는 경우가 많지만, COUNT 같은 경우엔 같은 컬럼을 사용하기도 합니다. WHERE, HAVING 비교 예시에선 큰 의미를 두지 않고 col1을 사용했어요. HAVING 파트에서 핵심은 HAVING은 GROUP BY를 한 후에 생기는 컬럼에 조건을 설정한다입니다. 이 부분 위주로 보시면 될 것 같아요
vs code
0
51
2
수업자료 다운
0
49
2
쿼리 화면 문의
0
72
2
4-5. 3번 문제 질
0
66
2
JOIN 1번 문제
1
76
2
battle 테이블 생성 시 생성 오류
0
69
1
5-6. 4번 문제 WHERE 조건의 위치 문의
0
65
2
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
1
71
2
battle table 오류
0
69
2
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
0
62
2
12강 집계 함수
0
49
1
2-6. 연습 문제 1~3번
0
50
1
안녕하세요! 11번 문제 query문에 관해 질문드립니다
0
51
1
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
0
67
1
섹션 별 퀴즈
0
67
1
espanso 설치 완료 후 프로그램 실행 문제
0
104
2
Syntax에러
0
83
2
4-5. 1번 문제 TIMESTAMP 관련 질문
0
89
2
시각화 도구 사용
0
110
2
11번 문제 GROUP BY 사용하는 이유
0
99
1
big query 쿼리 결과 컬럼 폭
0
108
3
battle 스키마 조건 복사 파일이 열리지 않아요.
0
130
1
6-5 데이터 검증 결과 예시문제
0
79
2
battle 스키마 조건 복사붙여넣기용 자료
0
115
2





