조건에 맞는 행을 전부 가져와야 하는 쿼리 질문입니다.ㅠ 0 6 1,702

by 이프로부족 [SQL Query] [2013.04.28 22:36:16]



 안녕하세요.

 통계용 쿼리를 하나 만들고 있는데요

 다음의 테이블에서...

  판매자 물품코드   판매가격
    A    48    110000
   A 103   103000
   B 334 106550
   B     243  100000
   B 2    5000
   B 234  150000
   B 48    110000
   C     16    120000 
   C 288 103000
   C 636    153000 
   C   248  103300 
   .
   .


대충 이런 모양입니다. 
요구받은 조건은 판매가격이 100000 이상인 물품코드를 4개 이상 가지고 있는 판매자와 물품코드 판매가격
을 보여줘야 합니다..ㅠ


즉 저 테이블에서 A만 빠진 형태를 보여주면 됩니다.

 처음에는 row_number를 이용해서  ROW_NUMBER() over(partition by 판매자 order by 판매가격) as rownum
컬럼을 하나 판다음에  서브쿼리로 놓고 바깥쪽에서 하려고 했는데 잘 안되는군요..ㅠ

도움좀 부탁 드립니다. 감사합니다.
by 손님 [2013.04.29 08:23:33]
Count(*) Over ....을 사용해 보세요..

by 우리집아찌 [2013.04.29 08:45:55]
-- 이런식으로도 가능할겁니다..
WITH T ( 판매자 ,물품코드,판매가격) AS (
SELECT 'A','48',  110000 FROM DUAL UNION ALL
SELECT 'A','103',  103000 FROM DUAL UNION ALL
SELECT 'B','334', 106550 FROM DUAL UNION ALL
SELECT 'B','243', 100000 FROM DUAL UNION ALL
SELECT 'B','2',  5000  FROM DUAL UNION ALL
SELECT 'B','234', 150000 FROM DUAL UNION ALL
SELECT 'B','48',  110000 FROM DUAL UNION ALL
SELECT 'C','16',  120000 FROM DUAL UNION ALL
SELECT 'C','288', 103000  FROM DUAL UNION ALL
SELECT 'C','636',  153000 FROM DUAL UNION ALL 
SELECT 'C','248', 103300 FROM DUAL 
)

SELECT * FROM T WHERE 판매자 IN (  SELECT 판매자 FROM T
                  WHERE 판매가격 >= 10000
                  GROUP BY 판매자 HAVING COUNT(*) >= 4 );

by 이재현 [2013.04.29 09:06:22]
이 방식은 좀안좋아요 같은테이블을 두번 읽어 와서리..

by 우리집아찌 [2013.04.29 09:20:31]
그렇군요.. ^^*

by 손님 [2013.04.29 09:15:29]

SELECT *
FROM (
  SELECT
   T.*
  ,COUNT(CASE WHEN 판매가격 >= 100000 THEN 1 END) OVER(PARTITION BY 판매자) TC
  FROM T
  )
WHERE TC >=4


by 손님 [2013.04.29 14:38:09]

답변주신 분들 모두 정말 감사합니다. count() over를 이용해서 해결하였습니다. 열심히 공부해야겠네요ㅠㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입