구루비 회원들 안녕하세요.
쿼리의 도움을 받고자.... 또 글을 남기네요......
( 잘하고싶네요... 정말!
간단한거 같으면서도 값이 나오질않아 문의드립니다.
일단 테이블과 데이터를 보시죠!
테이블명 Order
id | price(판매금액) | date(판매일자) |
1 | 1000 | 2018-11-01 |
2 | 1000 | 2018-12-01 |
3 | 1000 | 2018-12-01 |
4 | 1000 | 2018-12-01 |
5 | 1000 | 2018-12-02 |
6 | 1000 | 2018-12-02 |
데이터를 보면 다음과같이 주문이 들어왔습니다.
11월1일 : 천원
12월1일 : 3천원
12월 2일 : 2천원
제가 원하는 데이터
1. 2018년 총판매금액
2. 2018년 12월 1일 총판매금액
3. 2018년 12월 2일 총판매금액
* 한번에 데이터를 뽑기위해 다음과 같은 절차로 진행하였습니다. *
[1]. 2018년의 데이터를 구하기
SELECT * FROM ORDER WHERE LEFT(ADDTIME(date, '9:0:0'), 4) = '2018';
[2]. 12월 1일자 총판매금액을 구하기
SELECT SUM(price) FROM ORDER WHERE LEFT(ADDTIME(date, '9:0:0'), 10) = '2018-12-01'; ==> 3천원이 나옵니다.
[3]. [2]을 응용하여 [1]에 서브쿼리를 만들기! ( 이 부분이안되요ㅠ)
SELECT SUM( (SELECT price FROM ORDER WHERE LEFT(ADDTIME(date, '9:0:0'), 10) = '2018-12-01') ) AS '12월 1일 총판매금액' FROM ORDER WHERE LEFT(ADDTIME(date, '9:0:0'), 4) = '2018';
* 이렇게 하고싶은 이유 *
한번의 쿼리로
1. '2018년 총판매금액'
2. 12월 1일자 총판매금액
3. 12월 2일차 총판매금액
을 볼 수 있는 쿼리를 짜고싶습니다.
[3]처럼 할 경우 데이터가 나올 줄 알았는데 안나와요 ㅠ....
( 서브쿼리로 특정 일의 데이터를 가져온다음 SUM()을 하면 합계가 구해질 수 알앗는데...)
with t_order as (select 1 id, 1000 price, '2018-11-01' dt union all select 2 id, 1000 price, '2018-12-01' dt union all select 3 id, 1000 price, '2018-12-01' dt union all select 4 id, 1000 price, '2018-12-01' dt union all select 5 id, 1000 price, '2018-12-02' dt union all select 6 id, 1000 price, '2018-12-02' ) select dt , sum(price) , sum(sum(price)) over() as tot1 , (select sum(price) from t_order s where s.dt like concat(substr(m.dt, 1, 7), '%')) as tot2 from t_order m where dt like '2018-12%' group by dt ; --- union all 조합 select dt , sum(price) from t_order where dt like '2018-12%' group by dt union all select '합계' , sum(price) from t_order where dt like '2018-12%' ;