작성
·
486
1
안녕하세요
유익하고 훌륭한 강의 덕분에 쿼리 이해가 일취월장하고 있습니다. 감사합니다.
강사님께서 거듭 강조하시고 중요하다고 지적하신 "집합의 레벨"이 무슨 의미인지 문의드립니다.
group by로 집계하거나 analytic sql로 데이터를 aggregate할 때 "집합의 레벨"이란 표현이 자주 나오는데 어떻게 이해하면 좋을까요?
하나의 행(레코드)가 여러 열(속성)을 가지는 경우에 있어서, 어느 하나의 열을 기준으로 다른 열의 값을 집계할 때, 그 기준이 되는 열을 집계결과의 '집합의 레벨' 이라고 이해하면 될까요?
이전 질문과 같이, 저도 첫 임시테이블(temp_01)에서 group by를 product_id와 category_id 두 열을 기준으로 했습니다. 여기서 첫 임시테이블의 '집합의 레벨'인 product_id이므로 category_id를 또다른 레벨로 두는 것이, 기능상 차이는 없지만 개념상 부적절하다고 생각하면 옳게 이해한 것일까요?
"집합의 레벨"이라는 표현이 모호하게도 들으면 이해되는듯 하면서도 막상 쿼리를 작성할 때 머릿속에 원하는 결과가 흐릿해서 바라는 대로 결과를 얻지 못해 질문드립니다.
답변 1
5
안녕하십니까,
강의가 실력 향상에 도움이 되셨다니, 저도 기쁩니다 ^^
제가 강조해서 설명드리는 '집합의 레벨'은 해당 집합의 특정 컬럼(가공값 포함)으로의 유일성(Unique)이 어떤 레벨이냐를 의미합니다. 여기서 '집합'은 단일 테이블, 또는 조인의 결과, Group by 의 결과, 또는 다른 유형의 데이터 연결 결과등을 의미합니다.
즉 집합의 레벨 변경이라고 설명드리는 부분은 해당 집합의 유일성이 최초에는 특정 컬럼(주로 pk 컬럼 또는 조인 연결컬럼)으로 어떻게 되어 있고, 이들 집합이 연산(조인, group by, 기타 데이터 연결)의 수행 결과 어떻게 유일성이 변화되는지를 의미하는 것입니다.
가령 직원(emp) 테이블은 empno로 unique하며, deptno로 중복(M) 레벨로 데이터가 구성되어 있습니다.
emp 테이블에 group by를 수행하게 되면 해당 연산의 결과는 group by에 명시된 컬럼들 기준으로 unique하게 집합 레벨이 변경이 됩니다.
emp 테이블과 dept 테이블(deptno로 unique한 집합 레벨)을 연결 컬럼을 deptno로 하여 조인을 수행하게 되면 emp 테이블은 조인 연결 컬럼인 deptno로 M, dept 테이블은 조인 연결 컬럼인 deptno로 1이 되므로 emp 테이블의 집합 레벨, 즉 empno로 unique한 집합 레벨은 변경 되지 않습니다. 반면에 dept 테이블의 경우 기존에 deptno로 unique했지만, 조인의 결과로 deptno는 중복(M) 레벨로 변경되게 됩니다. 결국 조인 결과는 조인 연결 컬럼으로 M:1 연결시 M에 해당하는 테이블을 집합 레벨을 그대로 따라가게 됩니다.
이전 질문과 같이, 저도 첫 임시테이블(temp_01)에서 group by를 product_id와 category_id 두 열을 기준으로 했습니다. 여기서 첫 임시테이블의 '집합의 레벨'인 product_id이므로 category_id를 또다른 레벨로 두는 것이, 기능상 차이는 없지만 개념상 부적절하다고 생각하면 옳게 이해한 것일까요?
=> 이건 제가 질문을 잘 이해하지 못했습니다. 1번 답변을 살펴 보시고, 추가적인 질문이 필요하시면 다시 한번 글 부탁드립니다.
감사합니다.