통계쿼리 문의드립니다. 0 2 1,771

by 리틀맹 [SQL Query] [2013.01.07 17:06:17]


오랜만에 쿼리를 만질려니... 머리가 안돌아가네요 ㅠㅠ


예시) 기존 데이터
phone     dong     total(%)   seq    
=============================================
01011112222   강남역2번출구 31.58   20121219010366
01011112222  abc아파트 102동   33.58   20121223000001
01022223333  e아파트2차    33.33   20121218002323
01022223333  신당역3번출구   30.77   20121217088881   
01022223333  c아파트8동    30.43   20121216037951
01044445555  잠실역1번출구   33.33   20121230031490
01044445555   한양대학교입구    33.33   20121214054794
01044445555   뱅뱅사거리    33.33  20121210005224
01055556666   롯데캐슬@    34   20121208594563


예시) 추출하려는 데이터
phone     dong     total(%)   seq    
=============================================
01011112222   강남역2번출구 31.58   20121219010366
01011112222  abc아파트 102동   33.58   20121223000001
01022223333  e아파트2차    33.33   20121218002323
01022223333  신당역3번출구   30.77   20121217088881
01044445555  잠실역1번출구   33.33   20121230031490
01044445555   한양대학교입구    33.33   20121214054794
01055556666   롯데캐슬@    34   20121208594563


전화 번호당 최대 2개까지만 뽑고싶습니다.
order by phone, total, seq desc 로 해서요,,,
1개나 2개로 나온 데이터는 상관없는데 문제는 3개로 나온 데이터입니다.
(위에 01022223333  이나 01044445555  데이터처럼)

도저히 제 실력으로는 쿼리로 나올수가 없어서 꼼수로 자바파일을 만들어 돌릴라는데..
그전에 혹시나 하여 도움요청드립니다.

쿼리로 뽑아낼 방법이 있을까요??
8i 입니다.
by 아린 [2013.01.07 17:25:09]
WITH t(phone, dong, total, seq) AS(         
SELECT '01011112222',   '강남역2번출구'  , 31.58,  '20121219010366' FROM dual UNION ALL
SELECT '01011112222',  'abc아파트 102동' , 33.58,  '20121223000001' FROM dual UNION ALL
SELECT '01022223333',  'e아파트2차'      , 33.33,  '20121218002323' FROM dual UNION ALL
SELECT '01022223333',  '신당역3번출구'   , 30.77,  '20121217088881' FROM dual UNION ALL
SELECT '01022223333',  'c아파트8동'      , 30.43,  '20121216037951' FROM dual UNION ALL
SELECT '01044445555',  '잠실역1번출구'   , 33.33,  '20121230031490' FROM dual UNION ALL
SELECT '01044445555',   '한양대학교입구' , 33.33,  '20121214054794' FROM dual UNION ALL
SELECT '01044445555',   '뱅뱅사거리'     , 33.33,  '20121210005224' FROM dual UNION ALL
SELECT '01055556666',   '롯데캐슬@'      ,  34  ,  '20121208594563' FROM dual
)
SELECT phone, dong, total, seq
  FROM (SELECT phone, dong, total, seq
                          , ROW_NUMBER() OVER(PARTITION BY phone ORDER BY phone, total, seq DESC) rn 
                FROM t
             )  
 WHERE rn <= 2  

by 리틀맹 [2013.01.07 17:46:11]

쿼리를 짜면서 폰번호별로 순위를 매겼음 좋겠다고 생각은 했지만 아는건 rownum 뿐이라.. 이렇게 그룹별로 묶어서 행번호가 나오는것도 첨 알았네요 ㅠㅠ
아린님 완전 감사드립니다. 잘 됩니다 ㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입