오라클 이름 정렬순서 질문입니다. 0 7 874

by 느그세여 [SQL Query] order by [2017.09.25 09:42:10]


안녕하세요? 오라클 정렬순서에 관한 질문이 있어서 문의드립니다.

현재 제가 원하는 정렬순서는 동명이인은 사람은 무조건 맨 밑에서 조회되게끔 하고싶은데 잘 안되서 질문드립니다.

꼭 가나다순으로 정렬될 필요는 없고 동명이인만 맨 마지막에 정렬하고 싶은데 방법이 있을까요?

ex)
1.채명숙                  1.한미희
2.한미희                  2.호영성
3.권용무                  3.박영관
4.권용무       ->        4.권용무
5.호영성                  5.권용무
6.박영관                  6.채명숙                 
7.채명숙                  7.채명숙                 

by 우리집아찌 [2017.09.25 09:48:07]
WITH T AS (
SELECT '채명숙' NM FROM DUAL UNION ALL                
SELECT '한미희' FROM DUAL UNION ALL                
SELECT '권용무' FROM DUAL UNION ALL                
SELECT '권용무' FROM DUAL UNION ALL                
SELECT '호영성' FROM DUAL UNION ALL                
SELECT '박영관' FROM DUAL UNION ALL                
SELECT '채명숙' FROM DUAL 
)
SELECT A.* 
  FROM (SELECT NM , COUNT(*) CNT
          FROM T
          GROUP BY NM ) A
      ,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 2 )  B
 WHERE A.CNT >= B.LV
 ORDER BY CNT , NM
         

 


by 느그세여 [2017.09.25 09:50:51]

계속 헤매고 있었는데

정말 감사합니다. ^^


by 김용한 [2017.09.25 10:12:20]

우리집아찌님

만약에 동명이인이 3명이상이면

채명숙,채명숙,채명숙 이렇게3명이면

level<=3 해야하나요?


by 김용한 [2017.09.25 09:52:58]

with t( nm ) as (
select '한미희' from dual union all
select '호영성' from dual union all
select '박영관' from dual union all
select '권용무' from dual union all
select '권용무' from dual union all
select '채명숙' from dual union all
select '채명숙' from dual
)
select a.*
      ,max(rn) over (partition by a.nm order by a.nm)
  from 
(
select a.nm ,row_number() over (partition by a.nm order by a.nm) rn
  from t a
)a
order by max(rn) over (partition by a.nm order by a.nm)
,a.nm
,a.rn 
;


by 느그세여 [2017.09.25 09:57:03]

답변 감사합니다 ^^


by 마농 [2017.09.25 10:22:15]
SELECT *
  FROM t
 ORDER BY COUNT(*) OVER(PARTITION BY nm), nm
;

 


by 김용한 [2017.09.25 10:25:16]

헉 깔끔하네요 ~~ ㅋㅋ

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