안녕하세요.
그룹함수에 대한 기초가 부족해서 인지.. 쿼리가 동작하지 않는 이유가 잘 이해가 안 되어서 질문을 드려요.
with t1 as ( select 'A' as cnum, 2500 pnt, 500 usepnt from dual union all select 'B' as cnum, 4000 pnt, 1000 usepnt from dual ), t2 as ( select 'A' as cnums, 1000 savepnt, 0 usepnt from dual union all select 'A' as cnums, 1000 savepnt, 0 usepnt from dual union all select 'A' as cnums, 1000 savepnt, 500 usepnt from dual union all select 'B' as cnums, 5000 savepnt, 1000 usepnt from dual ) select sum(pnt) pnt1, (select sum(savepnt - usepnt) from t2 where cnums = 'A') as pnt2 from t1 where cnum = 'A' group by cnum
위 쿼리는 잘 동작하는데요.
저 쿼리에서 group by cnum을 지우면 "단일 그룹의 그룹 함수가 아닙니다" 라는 오류가 납니다.
제가 기대한 결과는 group by cnum가 없어도 pnt2 컬럼 값이 나오는 것이었는데요.
어떤 이유에서 group by cnum 이 있느냐 없느냐에 따라 결과가 달라지는 것 인가요..?
그룹함수에 대해 제대로 알지 못 한 부분이 무엇인지 궁금합니다.
딱히 이유는 없어 보입니다.
에러가 나는게 맞는지? 안나는게 맞는지도 모호하네요.
그냥 에러를 피해가야 할 것 같습니다.
1. (편법) 서브쿼리를 집계함수로 감싸기 : MIN((SELECT ~ ))
2. (편법) 아무거나 GROUP BY 추가하기 : GROUP BY NULL
3. (추천) 쿼리 뜯어 고치기 : 에러 원천 차단, 간결하게. 굳이 스칼라서브쿼리를 쓸 이유가 없어 보입니다.
SELECT pnt1, pnt2
FROM (SELECT SUM(pnt) pnt1 FROM t1 WHERE cnum = 'A')
, (SELECT SUM(savepnt - usepnt) pnt2 FROM t2 WHERE cnums = 'A')
;