쿼리질문입니다. 1 4 1,117

by 뉴스쿨84 [2013.10.16 10:15:34]



방금전에 첫번째 데이터로 질문을 드렸는데 실제 제가 사용하는 DB에서는 제가 GROUP BY 걸려있던걸 잘못보았습니다.
두번에 표처럼 데이터를 가공하려고 했는데 QTY라는 값때문에 잘 되지 않네요

원하는 것은 데이터에서 SIZE 값의 MAX를 참조해서 아래와 같은 결과를 원하는 것인데 GROUP BY로 묶어 버리면
QTY가 다르기 때문에 구분되어져 버리는데요.

결과처럼 QTY는 SIZE가 MAX값인 로우의 QTY를 그대로 가져와야 하는데 방법이 없을까요
실제 사용 DB에서는 로우도많고 데이터도 많아서 어떻게 해야할 지 방법이 떠오르질 않습니다.




데이터

NAME SIZE 분류 QTY
메뚜기 2013001 곤충 10
메뚜기 2013002 곤충 20
잠자리 2013001 곤충 30
잠자리 2013002 곤충 10
개구리 2013001 곤충 20
사마귀 2013001 곤충 20
  2013001 곤충 30

결과

NAME SIZE 분류 QTY
메뚜기 2013002 곤충 20
잠자리 2013002 곤충 10
개구리 2013001 곤충 20
사마귀 2013001 곤충 20
   2013001 곤충 30
by 우리집아찌 [2013.10.16 10:26:43]
WITH T(NM, SZ ,분류 ,QTY ) AS (
SELECT '메뚜기','2013001','곤충','10' FROM DUAL UNION ALL
SELECT '메뚜기','2013002','곤충','20' FROM DUAL UNION ALL
SELECT '잠자리','2013001','곤충','30' FROM DUAL UNION ALL
SELECT '잠자리','2013002','곤충','10' FROM DUAL UNION ALL
SELECT '개구리','2013001','곤충','20' FROM DUAL UNION ALL
SELECT '사마귀','2013001','곤충','20' FROM DUAL UNION ALL
SELECT '거 미','2013001','곤충','30' FROM DUAL 
)

SELECT NM   "NAME"
   ,MAX(SZ) "SIZE"
   ,분류
   ,MAX(QTY) KEEP(DENSE_RANK LAST ORDER BY SZ) "QTY"
 FROM T
 GROUP BY NM,분류
 

by 뉴스쿨84 [2013.10.16 11:08:43]

답변 감사드립니다. 도움이 많이 되었습니다.
LAST ORDER BY 사용하는 방법이 있었네요^^ 감사합니다.


by 마농 [2013.10.16 10:44:32]
-- 컬럼이 몇개 안될때는 Group By 와 Keep 을 사용하시면 되구요.
-- 컬럼이 많을 때는 Row_Number 를 이용하세요.
SELECT name, size, 분류, qty
  FROM (SELECT name, size, 분류, qty
             , ROW_NUMBER() OVER(PARTITION BY name ORDER BY size DESC) rn
          FROM t
        )
 WHERE rn = 1
;

by 뉴스쿨84 [2013.10.16 11:09:55]
네 마농님 감사합니다.
도움이 많이 되었어요 앞으로도 기억에 두었다가 사용하면 좋을것 같습니다.
바쁘시간 내주셔서 답변 달아주셔서 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입