inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

초보자를 위한 BigQuery(SQL) 입문

2-5. 집계(GROUP BY + HAVING + SUM/COUNT)

2-5 where과 having 예시 쿼리문에 대한 질문

해결된 질문

269

박서현

작성한 질문수 3

0

pdf파일 158페이지, 159페이지에 있는 where과 having 쿼리 예시문을 보다가 궁금한 게 생겨서요.

sql bigquery 데이터-리터러시

답변 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()안에 있는 컬럼이 같을 수 있는지에 대한 질문이었어요!

‘특정 컬럼 기준으로 모으면서 다른 컬럼에서 집계 가능’하다고 배웠던 것 같은데, 그룹화 기준 컬럼과 집계하는 컬럼이 같을 수도 있는 건지 궁금해서 다시 여쭤봅니다!

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

72

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