해결된 질문
작성
·
45
답변 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번 문제 질문 있습니다!
요약:
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;
GROUP BY
에서 EXTRACT
함수 사용:GROUP BY
구문에서 EXTRACT
함수를 사용하여 시간 단위로 그룹화할 때, 사용 방법은 다음과 같습니다. EXTRACT
로 추출한 값은 GROUP BY
에 직접 삽입할 수 있습니다.이런 방식으로 하시면 서브쿼리를 사용하지 않고도 원하는 데이터를 추출할 수 있습니다. 또한, GROUP BY
구문에서 EXTRACT(HOUR FROM battle_datetime)
을 직접 인식하여 처리할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.