MYSQL 테이블조인 후 그룹정렬 문의 0 4 3,420

by 빈이 [MySQL] 조인 그룹 정렬 [2016.06.13 16:09:49]


실제는 maria DB 입니다만... mysql과 차이가 없는것 같아서 mysql로 분류해서 문의드립니다.

-- SAMPLE

SELECT empno, ename, job, sal, rnum
FROM (
   SELECT a.*, 
           (CASE @vjob WHEN a.job THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
          
(@vjob:=a.job) vjob
   FROM emp a, (SELECT @vjob:=0, @rownum:=0 FROM DUAL) b
   ORDER BY a.job, a.sal                 
) c;

위와 같은 경우에는 단일테이블+그룹정렬을 위한 변수 선언해서 쓰는것 같은데요.

위를 조회 할 경우

ORACLE의 ROW_NUMBER() OVER (PARTITION BY FEALD1 ORDER BY FEALD2 ASC) AS RNUM의 그룹정렬함수처럼 정상적으로 나오는데...

FEALD1 , FEALD2, RNUM

A, 11, 1

A, 21, 2

B, 1, 1

B, 5, 2

B, 31, 3

================================================================

SELECT empno, ename, job, sal, rnum
FROM (
   SELECT a.*, 
           (CASE @vjob WHEN a.job THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
          
(@vjob:=a.job) vjob
   FROM emp a, job b, (SELECT @vjob:=0, @rownum:=0 FROM DUAL) b

WHERE A.column_name = B.column_name
   ORDER BY a.job ASC , a.sal ASC
) c;

위와 같이 2개의 테이블을 조인한 상태에서의 그룹정렬 RUNM의 값은 제가 원하는 대로 나오지를 않습니다.

2개 테이블을 조인한 상태에서의 그룹정렬 방법 문의 드립니다.

 

 

by 마농 [2016.06.17 13:55:04]

Order By 와 동일수준에서 변수를 함께 사용시엔 원치않는 결과가 나올 수 있습니다.

조인 안한 쿼리가 잘 나온 것도 어쩌면 행운일수도 있습니다.

Order By 우선 적용 후(인라인뷰) 정렬된 결과를 대상으로 인라인뷰 밖에서 변수를 적용하세요.


by 빈이 [2016.06.24 16:21:52]

Oracle은 말씀하신 내용대로 인데,

Maria DB는 동일레벨에서 처리해도 정상적으로 정렬되어서 나오더라구요.

테이블 join 후 오더링에 대한 방법은 찾지 못해서 단일 테이블 오더링으로 결국은 처리 했습니다^^;;;


by 마농 [2016.06.24 16:43:57]

글쎄요?

제 답변대로 시도는 해보셨는지요?

제 답변은 정렬에 관한 얘기가 아니었습니다.

변수 사용위치에 대한 얘기 였습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입