안녕하세요. table A no | subject ------------- A01 | test table B no | desc ------------ A01 | AAAA A01 | BBBB 이렇게 있을때 no | desc | cnt ---------------- A01 | AAAA | 2 위와 같은 결과를 얻고 싶습니다. GROUP BY를 안쓰고도 가능할까요?
WITH ta AS ( SELECT 'A01' no, 'test' subject FROM dual ) , tb AS ( SELECT 'A01' no, 'AAAA' dsc FROM dual UNION ALL SELECT 'A01', 'BBBB' FROM dual ) -- 1. Group By 쓰면 편한데??? SELECT a.no , MIN(b.dsc) dsc , COUNT(*) cnt FROM ta a , tb b WHERE a.no = b.no GROUP BY a.no ; -- 2. 왜 굳이 안쓰려는지??? SELECT no , dsc , cnt FROM (SELECT a.no , b.dsc , COUNT(*) OVER(PARTITION BY a.no) cnt , ROW_NUMBER() OVER(PARTITION BY a.no ORDER BY dsc) rn FROM ta a , tb b WHERE a.no = b.no ) WHERE rn = 1 ;
답변감사합니다.
다른 테이블이 더 있어서 GROUP BY를 쓸수 없는부분이 있어서 질문드렸습니다.
저는
FIRST_VALUE (b.desc) OVER (PARTITION BY a.no ORDER BY b.desc)를 썼었는데..ROW_NUMBER()으로 수정해야겠네요.