database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39374 게시물 읽기
No. 39374
차수 구하는 쿼리 단순하게 할 수 없을까요.
작성자
김정묵(popolio)
작성일
2012-04-02 18:41
조회수
5,418

아래와 같의 AA, BB테이블에서 최대 차수를 구하여 BB의 value1을 구하는 쿼리를 작성하는데,

서브쿼리로 넣는 방법 말고 더 좋은 방법이 없을 까요?

AA TABLE
-------------
SEQNO CHASU
12345    01
12345    02
12345    03
12345    44
12346    01
12346    04
12346    34


BB TABLE
--------------------------------------------------
SEQNO    CHASU        VALUE1
12345       44                 01042943211

 

QUERY
--------------------------------------------
SELECT  BB.VALUE1
FROM AA, BB
WHERE AA.SEQNO = '12345'
AND       AA.SEQNO = BB.SEQNO
AND       BB.CHASU = (SELECT MAX(CC.CHASU) 
                                          FROM  AA ZZ
                                          WHERE ZZ.SEQNO = AA.SEQNO)

물론 AA테이블 index생성해서 index_desc로 max를 사용안할 수 는 있지만, 서브쿼리를 안쓰고 하는 방법(?)  ..... 어렵네요.

 

이 글에 대한 댓글이 총 1건 있습니다.

-- 1. Group By Max 후 In 조건으로 제공
SELECT *
  FROM bb
 WHERE (seqno, chasu)
    IN (SELECT seqno
             , MAX(chasu) chasu
          FROM aa
         WHERE seqno = '12345'
         GROUP BY seqno
        )
;


-- 2. Group By Max 후 Join
SELECT a.seqno
     , a.chasu
     , b.value1
  FROM (SELECT seqno
             , MAX(chasu) chasu
          FROM aa
         WHERE seqno = '12345'
         GROUP BY seqno
        ) a
     , bb b
 WHERE a.seqno = b.seqno
   AND a.chasu = b.chasu
;


-- 3. Join 후 Group By Max & Keep
SELECT a.seqno
     , MAX(a.chasu) chasu
     , MAX(b.value1) KEEP(DENSE_RANK LAST ORDER BY a.chasu) value1
  FROM aa a
     , bb b
 WHERE a.seqno = '12345'
   AND a.seqno = b.seqno
   AND a.chasu = b.chasu
 GROUP BY a.seqno
;


-- 4. Group By Max 후 Scalar Sub Query
-- 결과가 다를 수 있음(아우터 조인 효과 있음)
SELECT a.seqno
     , a.chasu
     , (SELECT b.value1
          FROM bb b
         WHERE a.seqno = b.seqno
           AND a.chasu = b.chasu
        ) value1
  FROM (SELECT seqno
             , MAX(chasu) chasu
          FROM aa
         WHERE seqno = '12345'
         GROUP BY seqno
        ) a
;

마농(manon94)님이 2012-04-03 08:46에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39379두 쿼리의 차이점?? [3]
최인수
2012-04-05
5022
39377차감(?) 쿼리 질문입니다. [2]
초보
2012-04-04
4336
39376오라클 쿼리 질문드립니다 [1]
진현철
2012-04-04
3826
39374차수 구하는 쿼리 단순하게 할 수 없을까요. [1]
김정묵
2012-04-02
5418
39373대용량 몇천만건 데이터를 조회할때.... [1]
파주
2012-04-01
4195
39372오라클 이럴 경우 문자변환은 어떻게??? [2]
조성훈
2012-03-30
4928
39371단위별 동일 값 설정하기 (쿼리문의) [3]
정용석
2012-03-30
4332
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다