오라클 결과값 중 특정값만 조회 0 5 948

by dnfrkwhr [Oracle 기초] [2019.02.22 16:01:05]


안녕하세요. 오라클 조회 관련 문의 좀 드릴게요.

우선 테이블은 아래와 같습니다.

이름
A 0
A 8
B 0
C 8

이중에서 값이 0이 포함된 값은 모두 추출하고 싶습니다. 

원하는 결과는 아래와 같습니다.(A는 값 0과 8을 가지고 있으므로 포함, B는 0만 가지고 있으므로 포함)

이름
A 0
A 8
B 0

감사합니다.

by 랑에1 [2019.02.22 16:35:31]

WITH t(name, value) AS (
	SELECT 'A', 0 FROM dual UNION ALL 
	SELECT 'A', 8 FROM dual UNION ALL
	SELECT 'B', 0 FROM dual UNION ALL
	SELECT 'C', 8 FROM dual
)

SELECT name, value
FROM 
(
	SELECT name, value, count(DECODE(value, 0, 1)) OVER(PARTITION BY name) cnt
	FROM t
)
WHERE cnt > 0


by dnfrkwhr [2019.02.22 18:00:57]

우선 감사드립니다. 그러나 쿼리 실행해보면 "ORA-32033: 지원되지 않는 열 별칭 지정 "이라는 에러가 발생합니다. 

오라클 10g에서는 어떻게 하는지요?


by 무지버기 [2019.02.24 00:21:10]
오라클 10g는 별칭 설정을 달리 하셔야 합니다.

by 랑에 1님의 쿼리를 아래와 같이 변경 하시면 됩니다.

WITH t AS (
    SELECT 'A'  name, 0 value  FROM dual UNION ALL
    SELECT 'A', 8 FROM dual UNION ALL
    SELECT 'B', 0 FROM dual UNION ALL
    SELECT 'C', 8 FROM dual
)
SELECT name, value
FROM
(
    SELECT name, value, count(DECODE(value, 0, 1)) OVER(PARTITION BY name) cnt
    FROM t
)
WHERE cnt > 0


다른 방법은


WITH t AS (
    SELECT 'A'name , 0 value FROM dual UNION ALL
    SELECT 'A', 8 FROM dual UNION ALL
    SELECT 'B', 0 FROM dual UNION ALL
    SELECT 'C', 8 FROM dual
)
SELECT
*
FROM t a
WHERE EXISTS (SELECT 1 FROM t b 
               WHERE a.name = b.name
                 AND b.value = 0) 


 


by dnfrkwhr [2019.02.25 12:39:12]

답변 감사드립니다. 다시 한번 많은 도움되었습니다. 감사합니다.!


by 마농 [2019.02.26 08:47:23]
-- In SubQuery
SELECT *
  FROM t
 WHERE name IN (SELECT name FROM t WHERE value = 0)
;
-- Exists SubQuery
SELECT *
  FROM t m
 WHERE EXISTS (SELECT 1 FROM t s WHERE s.value = 0 AND s.name = m.name)
;
-- Self Join
SELECT m.*
  FROM t m
     , t s
 WHERE s.value = 0
   AND s.name = m.name
;
-- Analytic Function
SELECT *
  FROM (SELECT name, value
             , MIN(DECODE(value, 0, 0)) OVER(PARTITION BY name) x
          FROM t
        )
 WHERE x = 0
;

 

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