작성
·
252
0
안녕하세요 ~ sql 초보 학습자 입니다.
강의 중에 나온 쿼리인데요
select empno, max(ename) as ename, avg(sal) as avg_sal
from temp_01
group by empno;
max(ename) 여기서 왜 사원명에 max를 사용하는지 잘 이해가 안가서 질문 드립니다.
그룹바이를 사용할 때는 select절에 합계 함수만 넣을 수 있기 때문에 조건 만족을 위해 넣어주는 것일까요?
empno에 합계 함수를 넣지 않아도 되는 이유는 empno 레벨로 그룹핑이 되었기 때문에 가능한 것이고요?
그럼 그룹바이에서 문자열을 넣고 싶을 때는 max를 사용하는 것으로 이해하면 되는 것일까요...?
답변 2
0
안녕하십니까,
오, 인프런 AI 인턴이 비슷한 답변을 잘 해주었군요.
select empno, max(ename) as ename, avg(sal) as avg_sal
from temp_01
group by empno
위 SQL에서 max(ename)을 일부러(?) 사용한 이유에 대해서 강의에서도 시간을 들여서 설명을 들이고 있지만, group by 를 사용할 경우 select 절에 올 수 있는 컬럼들은 group by 절에 사용된 컬럼과 aggregation 값입니다. 그런데 ename과 같은 문자열은 aggregation과 어울리지 않습니다. 하지만 max(ename)과 같이 일부러 ename을 aggregation을 적용해서 추출할 수 있습니다. temp_01은 group by 절의 empno 별로 동일한 ename을 가지고 있으므로 max, min을 적용해도 결과는 동일합니다.
이러한 이유로 문자열 ename에 max(ename)을 적용하였습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
gjejt님의 질문에 대해 답변드립니다. 말씀하신 것처럼 SQL에서 GROUP BY
절을 사용하면, SELECT
절에 GROUP BY
절에서 지정한 컬럼과 집계 함수만 사용할 수 있습니다. 만약 집계 대상이 아닌 다른 컬럼을 SELECT
절에 포함시키고 싶다면, 집계 함수를 사용하여 표현해야 합니다.
empno
에 대하여 GROUP BY
를 수행할 경우, 각 empno
별로 데이터를 묶어서 그룹화하게 됩니다. empno
는 이미 그룹화의 기준이 되므로 집계 함수를 적용하지 않아도 됩니다. 하지만 ename
과 같은 문자열 컬럼은 GROUP BY
에 사용되지 않았을 경우, 집계 함수를 적용해야 하는데, 이 때 max()
나 min()
함수를 사용하여 해당 그룹 내에서 가장 크거나 작은 값을 대표값으로 사용할 수 있습니다.
이와 관련하여 유사한 질문에 대한 답변이 ‘데이터 분석 SQL Fundamentals’ 과정에서 제공되어 있습니다. 아래의 URL을 참고하시면 이해에 도움이 될 것입니다.
위의 링크에서는 max(ename)
을 사용하는 이유에 대해 설명하고 있습니다. 해당 질문에 답변된 내용을 요약하자면, GROUP BY
를 사용할 경우 SELECT
절에 올 수 있는 컬럼은 GROUP BY
절에 사용된 컬럼과 집계 함수여야 하는데, PostgreSQL에서는 GROUP BY
절에 지정된 컬럼에 한하여 해당 컬럼과 직접적으로 관련 있는 컬럼의 경우에는 집계 함수를 사용하지 않고 사용할 수 있는 경우가 있습니다. max()
함수를 사용하는 것은 이러한 제약을 일반화하여 다른 DB에서도 잘 작동할 수 있도록 하는 안전한 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.