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

allie1017님의 프로필 이미지
allie1017

작성한 질문수

8시간 완성 SQLD(2과목)

노랭이 78번 문제풀이

p.90 78번 문제 질문

작성

·

50

·

수정됨

0

78번 문제 질문드립니다.

2번 문항의 SELECT 구문에서

CASE GROUPING(B.지역ID)~ 로 되어있는데 B.지역명이여야 맞는거 아닌가요? ㅠㅠ

그리고 ELSE 뒤에 MIN(지역명)도 가능한건지 이해가 잘 안됩니다.

지역명은 서울, 경기 이런 내용인데 MIN 으로 출력이 되는게 의아합니다..

답변 2

0

땃지님의 프로필 이미지
땃지
지식공유자

안녕하세요.

 

78번은 지역별, 이용월 별로 그루핑 해서 지역별, 월별 이용량 소계와 총계를 내는 쿼리를 만드는 문제입니다. 여기서는 지역명으로 GROUP BY 할수도 있을 것 같습니다. 하지만 지역ID로 하는 것이 가장 적절할 것 같아요. 별다른 제약 사항이 없다면 보통은 유일성이 보장되는 PK로 GROUP BY 하기 때문이죠.

 

그리고 GROUP BY 하지 않은 열은 집계를 해야합니다. 그래서 지역명에 MIN을 사용하게 되는 것입니다. 숫자형이 아닌 문자형 데이터에 min, max를 사용하면 우리가 알고 있는 가나다, abc 순서로 정렬해서 집계값을 도출하게 됩니다. 물론 평균값 같은 것은 문자형 데이터 집계에 사용할 수 없습니다.

 

감사합니다.

 

0

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

allie1017님의 질문에 감사합니다. SQL의 GROUPING 함수와 MIN 함수의 사용에 대해 궁금하신 것 같네요. 질문해 주신 사항에 대해 간단히 설명드리겠습니다.

  1. CASE GROUPING(B.지역ID): 이 부분은 GROUPING 함수가 NULL 값을 변환하여 집합 key가 포함되어 있는지 확인하는 데 사용됩니다. 이는 GROUP BY 절로 그룹화된 결과 집합에서 집합 수준을 결정하는 데 사용됩니다. SQL에서 GROUPING을 사용할 때는 일반적으로 컬럼 ID를 사용하기도 하며, 제시한 코드에서 ‘B.지역ID’를 사용하고 있는 것 같습니다.

  2. ELSE 뒤에 MIN(지역명): MIN 함수는 숫자뿐만 아니라 문자열에 대해서도 사용할 수 있습니다. 문자열의 경우, 알파벳 순서로 가장 앞선(사전적으로 가장 작은) 문자열을 반환합니다. 따라서, ‘서울’, ‘경기’와 같은 문자열에서 MIN은 알파벳 순서로 가장 작은 값을 반환하게 됩니다.

관련된 유사한 질문과 답변을 찾을 수 있는 링크를 아래에 첨부해 드립니다:

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

allie1017님의 프로필 이미지
allie1017

작성한 질문수

질문하기