1:N 관계에서 선택적 query문 1 3 2,923

by 자동제어술탱크 [2013.09.16 05:17:00]



제목 짓기가 참 애매하네요^^

이게 가능할지 모르겠는데 질문이 있어서 눈팅만하다가 처음으로 질문 올려봅니다.

1:N 관계의 테이블에서 대표적으로 하나만 가져오는 query를 작성하려고 합니다.

예를 들어

부서코드   이름
100  홍길동
100 홍길순
100 김길동
101 이기자
101 삼돌이
102 삼순이

이렇게 있을때

원하는 결과는 부서코드 하나와 이름 한개씩만 가져오려고 합니다. (이름은 아무 조건없이)

select * from 부서코드 a, 이름 b  where a.부서ID=b.부서ID

이렇게 하면 6개가 출력되는데 distinct 나 group by로는 해결이 안되네요

다른 좋은 방법이 없을까요?

실제로는 테이블 구조가 상당히 복잡하지만 단순하게 보면 이런 상황입니다.



by 마농 [2013.09.16 08:34:53]
"아무 조건없이"라는 말을 컴퓨터는 못알아 듯습니다.
확실하게 규칙을 정해서 알려줘야만 합니다.
-- 가장큰이름
SELECT deptno
     , MAX(ename) ename
  FROM emp
 GROUP BY deptno
;
-- 가장작은이름
SELECT deptno
     , MIN(ename) ename
  FROM emp
 GROUP BY deptno
;
-- 급여가 가장 높은 직원
SELECT deptno
     , MIN(ename) KEEP(DENSE_RANK LAST ORDER BY sal) ename
  FROM emp
 GROUP BY deptno
;
-- 입사가 가장 빠른 직원
SELECT deptno
     , MIN(ename) KEEP(DENSE_RANK FIRST ORDER BY hiredate) ename
  FROM emp
 GROUP BY deptno
;
-- 렌덤하게 가져오기
SELECT deptno
     , MIN(ename) KEEP(DENSE_RANK FIRST ORDER BY dbms_random.value) ename
  FROM emp
 GROUP BY deptno
;
-- 정렬기준에 따라 한건만 가져오기
SELECT *
  FROM (SELECT e.*
             , ROW_NUMBER() OVER(PARTITION BY deptno ORDER BY 정렬기준) rn
          FROM emp e
        )
 WHERE rn = 1
;

by 커피요쿠르트d [2013.09.16 10:44:52]

 
마농님 답중.. 아래 쿼리 하면 될거 같기도 한데... 안될까요? .. 이름은 뭐.. 가나다로 정렬을 ..하든..
한건씩만 가져오면 되니까.. 


-- 정렬기준에 따라 한건만 가져오기
SELECT *
 FROM (SELECT e.*
       , ROW_NUMBER() OVER(PARTITION BY deptno ORDER BY 정렬기준) rn
     FROM emp e
    )
 WHERE rn = 1
;
 

by 자동제어술탱크 [2013.09.16 16:26:35]
rownum으로 해결했습니다.

마농님, 커피요쿠르트d 님 억수로 감사합니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입