초보 쿼리 질문입니다 0 6 1,490

by IT노동자 [SQL Query] [2014.07.18 12:46:13]


ID    |      NAME        |    RANK

001   |      JAM1        |     1
001   |      JAM2        |     2
001   |      JAM3        |     3

002   |      MIN1        |     1
002   |      MIN2        |     2
002   |      MIN3        |     3

이렇게 되었는것을

각각의 아이디 그룹에서 최소 RANK, 최대 RANK를 구하고 싶습니다

결과물

ID    |      NAME        |    RANK

001   |      JAM1        |     1
001   |      JAM3        |     3

002   |      MIN1        |     1
002   |      MIN3        |     3

그룹 함수를 이용하는데 잘 안되는데 방법 좀 알려주세요

by 우리집아찌 [2014.07.18 13:17:44]
SELECT ID , MAX(NAME) NAME , MAX(RANK) RANK FROM 

(SELECT '001' ID , 'JAM1' NAME , '1' RANK FROM DUAL UNION ALL
SELECT '001' ID , 'JAM2' NAME , '2' RANK FROM DUAL UNION ALL
SELECT '001' ID , 'JAM3' NAME , '3' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN1' NAME , '1' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN2' NAME , '2' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN3' NAME , '3' RANK FROM DUAL )
GROUP BY ID                                
UNION ALL
SELECT ID , MIN(NAME) NAME , MIN(RANK) FROM 

(SELECT '001' ID , 'JAM1' NAME , '1' RANK FROM DUAL UNION ALL
SELECT '001' ID , 'JAM2' NAME , '2' RANK FROM DUAL UNION ALL
SELECT '001' ID , 'JAM3' NAME , '3' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN1' NAME , '1' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN2' NAME , '2' RANK FROM DUAL UNION ALL
SELECT '002' ID , 'MIN3' NAME , '3' RANK FROM DUAL )
GROUP BY ID                                

ORDER BY ID , RANK

 


by IT노동자 [2014.07.18 14:54:41]

감사합니다 많은 도움이 되었습니다^^


by 마농 [2014.07.18 15:08:01]

rank 순서대로 이름이 있어서 결과만 우연하게 맞게 나오는...


by 우리집아찌 [2014.07.18 17:19:46]

아 이름이 다 틀렸군요.. id랑 같은줄알았네요..

분석함수 쓰셔야죠..

 


by 아발란체 [2014.07.18 13:26:20]
WITH T(id, name, rank) AS (
  SELECT '001', 'JAM1', 1 FROM DUAL UNION ALL
  SELECT '001', 'JAM2', 2 FROM DUAL UNION ALL
  SELECT '001', 'JAM3', 3 FROM DUAL UNION ALL
  SELECT '002', 'MIN1', 1 FROM DUAL UNION ALL
  SELECT '002', 'MIN2', 2 FROM DUAL UNION ALL
  SELECT '002', 'MIN3', 3 FROM DUAL 
)
SELECT id, name, rank FROM (
  SELECT
    id, name, rank, 
    DECODE(rank,
      MIN(rank) OVER(PARTITION BY id),
      'true',
      MAX(rank) OVER(PARTITION BY id),
      'true',
      'false'
    ) AS minOrMax
  FROM
    T
) WHERE
  minOrMax = 'true'
;

 


by IT노동자 [2014.07.18 14:55:03]

감사합니다 많은 도움이 되었습니다^^ 더욱더 공부해야될것같아요 ㅜㅜ

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