[SQL쿼리] 서브쿼리(?)를 이용하여 조회된 데이터들의 합을 구하기 0 3 929

by 쿼리냠냠 [SQL Query] mysql [2018.12.04 16:38:47]


구루비 회원들 안녕하세요.
쿼리의 도움을 받고자.... 또 글을 남기네요...... 
( 잘하고싶네요... 정말! 

간단한거 같으면서도 값이 나오질않아 문의드립니다.

일단 테이블과 데이터를 보시죠!

테이블명 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()을 하면 합계가 구해질 수 알앗는데...)


 

by 소주쵝오 [2018.12.04 17:06:28]
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%'
;

 


by 모래가흙흙 [2018.12.04 17:27:32]
select case when dt is null then '합계' else dt end as dt,
	   sum(price) 
  from Order a
 where dt like '2018-12%'
group by dt with rollup

 


by 마농 [2018.12.06 08:15:57]
SELECT SUM(price) price_2018
     , SUM(CASE WHEN LEFT(ADDTIME(date, '9:0:0'), 10) = '2018-12-01' THEN price END) price_20181201
     , SUM(CASE WHEN LEFT(ADDTIME(date, '9:0:0'), 10) = '2018-12-02' THEN price END) price_20181202
  FROM ORDER
 WHERE LEFT(ADDTIME(date, '9:0:0'), 4) = '2018'
;

 

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