inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4-5. 시간 데이터 연습 문제 1~2번

4-5 시간데이터 연습문제 1~2번 질문

해결된 질문

119

yoonji

작성한 질문수 11

0

마지막 부분에 시간별 데이터 추출할때

서브쿼리 사용하지 않고

다이렉트로 추출할 수 없나요?

group by에 extract( hour from battle_datetime)은 인식을 못하는 건가요?

sql bigquery 데이터-리터러시

답변 2

0

카일스쿨

yoonji님 안녕하세요. 연습문제 2번의 답을 이렇게 공유드렸어요.

 

SELECT
  hour,
  COUNT(DISTINCT id) AS battle_cnt
FROM (
  SELECT
    *,
    EXTRACT(HOUR FROM battle_datetime) AS hour
  FROM basic.battle
)
GROUP BY
  hour
ORDER BY
  hour

 

지금 yoonji님이 말씀해주신 것은

SELECT
  EXTRACT(HOUR FROM battle_datetime) AS hour,
  COUNT(DISTINCT id) AS battle_cnt
FROM basic.title
GROUP BY
  EXTRACT(HOUR FROM battle_datetime) AS hour
ORDER BY
  hour

 

GROUP BY에서 EXTRACT가 먹히므로, 말씀하신대로 할 수 있습니다. 다만 GROUP BY 절에 들어갈 땐 SELECT 절에도 꼭 같은 내용이 들어가야 합니다. 그래서 추후에 쿼리를 작성할 때 2번 수정하는게 좋을지 vs 1번 수정하지만 조금 더 길게 하는 것이 좋은지를 고민해서 작성한다고 보시면 됩니다.

 

지금의 쿼리에선 바로 GROUP BY에 EXTRACT를 하는게 더 직관적으로 보일 수 있지만, 쿼리가 길어지면서 복잡도에 따라 여러번 수정하는 것보단 한번 수정하는 것이 좋다고 판단해 강의에선 그렇게 풀었다고 보시면 될 것 같아요.

 

쿼리를 작성할 때 개인의 스타일이 반영되는 케이스라고 보시면 됩니다. 현업에서 쿼리를 여러번 반복해서 수정해서 힘든 경우를 봐서 저는 한번만 수정하는 쿼리를 더 선호한다고 생각해주시면 될 것 같네요(쿼리 줄수가 길어지는 것보단 이게 더 괜찮다고 판단)

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. yoonji님.

시간 데이터 관련 문제에 대해 서브쿼리를 사용하지 않고 다이렉트로 추출하는 방법과 GROUP BY 구문에서 EXTRACT(HOUR FROM battle_datetime)를 사용하는 방법에 대해 설명드리려고 합니다.

관련 질문 URL:
- 4-5. 시간 데이터 연습 문제 2번 문제 관련
- 4-5 시간 데이터 연습 문제 3번 질문
- 4-5 연습문제 4번
- JOIN 5번 문제 질문 있습니다!

요약:

  1. 서브쿼리 없이 직접 추출:
    서브쿼리를 사용하지 않고 데이터를 추출할 때는 GROUP BY 구문에 바로 EXTRACT 함수를 사용하는 것이 가능합니다. 예를 들면, EXTRACT(HOUR FROM battle_datetime)SELECT 구문과 GROUP BY 구문에서 동시에 사용하여 시간을 그룹화할 수 있습니다.
   SELECT
       EXTRACT(HOUR FROM battle_datetime) AS battle_hour,
       COUNT(*) AS battle_count
   FROM `your_table_name`
   GROUP BY
       EXTRACT(HOUR FROM battle_datetime)
   ORDER BY
       battle_hour;
  1. GROUP BY에서 EXTRACT 함수 사용:
    GROUP BY 구문에서 EXTRACT 함수를 사용하여 시간 단위로 그룹화할 때, 사용 방법은 다음과 같습니다. EXTRACT로 추출한 값은 GROUP BY에 직접 삽입할 수 있습니다.

이런 방식으로 하시면 서브쿼리를 사용하지 않고도 원하는 데이터를 추출할 수 있습니다. 또한, GROUP BY 구문에서 EXTRACT(HOUR FROM battle_datetime)을 직접 인식하여 처리할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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