group by 절 질문드립니다 0 3 192

by 로키 [SQL Query] [2017.06.19 11:07:22]


SELECT  a.sn, nvl(MAX(t.ok), 0) ok, a.name
        FROM tb_A a,
                  (SELECT b.sn,
                          SUM(CASE WHEN b.ok = 'Y' THEN 1 ELSE 0 END) as ok
                  FROM TB_B b
                  WHERE ok IS not NULL
                  GROUP BY b.sn) c
        WHERE a.sn = c.sn(+)
    and ok > 0
        GROUP BY a.sn;

 

 

1행에  a.name 이란걸 추가하면 

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

그룹바이 표현이 아니라고 뜨는데 어떻게 해줘야 name을 추가할수 있나요??

by 마농 [2017.06.19 11:50:22]

1. sn 과 name 이 1:1 관계라면?
  - Group By 에 name 추가하시면 되구요.
2. sn 과 name 이 1:다 관계라면?
  - 어떤 결과를 보고 싶은지 부터 고민하셔야 합니다.


by 로키 [2017.06.19 13:06:15]

감사합니다 1:1관계로 잘해결하였습니다


by 마농 [2017.06.20 22:24:20]

아우터 조인이 무의미하게 사용되었고
ok 에 대한 조건도 너무 복잡하게 처리되었네요.
NVL 도 무의미하구요.
마지막 그룹바이가 필요한지도 의문입니다.

SELECT a.sn
     , a.name
     , b.ok
  FROM tb_a a
     , (SELECT sn
             , COUNT(*) ok
          FROM tb_b
         WHERE ok = 'Y'
         GROUP BY sn
        ) b
 WHERE a.sn = b.sn
 GROUP BY a.sn, a.name    -- ?
;

 

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