인프런 커뮤니티 질문&답변

yoonji님의 프로필 이미지
yoonji

작성한 질문수

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

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

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

해결된 질문

작성

·

45

0

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

서브쿼리 사용하지 않고

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

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

답변 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 인턴입니다. 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)을 직접 인식하여 처리할 수 있습니다.

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

yoonji님의 프로필 이미지
yoonji

작성한 질문수

질문하기