아래처럼 한다. tbl.nr 에 sum(cash_mony) 라는 필드명을 쓰면 또 sum이 반영되기 때문에, 명령으로 쓰면 안 되고 해당 컬럼 이름을 변경해 줘야 한다. 내부 쿼리(서브 쿼리)는 tbl 이라는 테이블이 되고, sum(cash_mony)는 nr 이라는 컬럼으로 대체된다. 그러면, tbl.nr 을 sum 해주므로, 아래와 같이 최종 값을 구할 수 있다.
cate가 다른 세 값을 구하려 or 구문을 썼는데, 이상한 값이 나와서, 찾아봤다.
해킹에만 union을 쓸 줄 알았는데, 유용하게 쓰게 되었다. 이젠 union을 해킹에 쓸 수 없을 정도로 방어가 되었기 때문에, 본연의 기능으로 돌아가는 것이다.
SELECT SUM( tbl.nr ) AS nr
FROM (
SELECT SUM( cash_mony ) AS nr
FROM exp
WHERE `cate` = '1001' AND `reg_date`
BETWEEN '20131001' AND '20131031'
UNION SELECT SUM( cash_mony ) AS nr
FROM exp
WHERE `cate` = '1002' AND `reg_date`
BETWEEN '20131001' AND '20131031'
UNION SELECT SUM( cash_mony ) AS nr
FROM exp
WHERE `cate` = '1003' AND `reg_date`
BETWEEN '20131001' AND '20131031'
) AS tbl
댓글 달기