inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

데이터 분석 SQL Fundamentals

집계 함수와 count(distinct) 실습

집계함수(문자열) 사용 시, 행의 데이터 불일치 하는 이유

363

seulki824

작성한 질문수 5

0

안녕하세요,강사님

집계함수와 count(distinct) 실습 강의 듣다가 궁금한점이 있어 문의드립니다.

 

하기 코드를 실행시킨 후, 나오는 값을 보면 하기 이미지와 같습니다.

select deptno, max(job), min(ename), max(hiredate), min(hiredate)

from hr.emp

group by deptno;

deptno가 10인 부서에서

job은 MAX 집계라 알파벳 순서가 가장 늦은 'PRESIDENT'가 나오는데, ename은 MIN이라서 deptono = 10인 부서에서 ename으로 가장 앞 순서인 'CLARK'가 나오더라고요.

근데 하기 데이터를 보면, job은 president인 사람의 이름은 KING인데...


이렇게 문자열에 집계함수를 사용하여 조회한 데이터는 행 정보가 일치하지 않는건가요? 즉, 직업정보,이름 정보는 서로 다 일치하지 않고, 개별 컬럼으로 계산되는 건지? 그 이유가 무엇인지 알고 싶습니다.

DBMS/RDBMS sql postgresql

답변 1

1

권 철민

안녕하십니까,

의심하신대로 GROUP BY에 aggregation 함수를 적용하게 되면 Group by 컬럼값 레벨로 aggregation 함수의 개별 컬럼별로 계산이 됩니다. 문자열 이라서가 아니라 Group by의 기본 메커니즘이 그렇습니다.

아래 SQL에서 보면 deptno값 별로, 예를 들어 10이라면, max(job)은 deptno=10에서 job 문자열이 가장 큰 값, min(ename)은 deptno=10에서 ename 문자열이 가장 작은 값을 반환하게 됩니다.

select deptno, max(job), min(ename), max(hiredate), min(hiredate)

from hr.emp

group by deptno;

반면에 위 SQL은 max(job)이 King 일 때의 ename은 반환하지 않습니다. 만약 해당 결과를 원하신다면 이후 강의인 analytic SQL이나 서브쿼리 강의를 들어보시면 쉽게 구하실 수 있을 것입니다.

감사합니다.

최신버젼 다운로드

0

51

2

'레벨 유지'의 의미에 대한 질문

0

67

2

date_part

0

70

2

lag/lead offset 관련 질문

0

74

2

join 관련 질문 (inner join, left join)

1

113

2

배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?

0

105

2

Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다

0

65

2

rollup시 null값 매출 라벨링

0

68

2

10. 조인 실습 - 02 관련 질문

0

72

1

조인실습03 - join의 pk-fk join

0

120

2

조인실습03 - join의 pk-fk join

0

81

2

(공유)맥, 스키마 import

0

85

2

sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?

0

147

2

1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?

0

141

2

안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.

0

98

1

섹션5 Group by 실습-01 강의 예제 질문

0

129

2

섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문

0

134

2

섹션2 조인 실습 01 강의 질문

0

141

2

lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.

0

137

1

Dbeaver오류

0

647

2

직원 별 가장 높은 매출

0

125

1

강의순서대로 실습코드순알려주세요.

0

144

1

m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?

0

143

1

rollup

0

93

2