오늘은 딱 한가지만 물어보겠습니다 형님 0 5 335

by 스티브1조 [SQL Query] [2018.03.09 15:04:57]


  SELECT   giftNm 경품명, SUM (giftCnt) 경품수, SUM (winCnt) 당첨자수, SUM (remainCnt) 남은수량
		    FROM (SELECT A.SCRATCH_GIFT_NM AS giftNm
		               , A.GIFT_READY_CNT AS giftCnt
		               , NVL (B.GIFT_WIN_CNT, 0) AS winCnt
		               , A.GIFT_READY_CNT - NVL (B.GIFT_WIN_CNT, 0) AS remainCnt
             
		            FROM EVT_SCRATCH_GIFT A
		               , (SELECT   SCRATCH_GIFT_CD, COUNT (*) GIFT_WIN_CNT
		                      FROM EVT_SCRATCH_WIN
		                      where win_dtm BETWEEN '20180402' AND '20180404'
		                  GROUP BY SCRATCH_GIFT_CD) B
		           WHERE A.SCRATCH_GIFT_CD = B.SCRATCH_GIFT_CD(+))
		GROUP BY ROLLUP (giftNm)
		 ORDER BY 경품수 NULLS FIRST


결과값이 이렇게나오구요

   경품명                     경품수  당첨자수 남은수량

LG트롬스타일러	              10	      1	   9
SMEG냉장고	                  10         1	   9
고프로카메라	               20        1	   19
발뮤다공기청정기	            30	     1	   29
다이슨헤어드라이기	            40	    1	   39
마샬스피커	                    50  	0	    50
드롱기커피포트	                 70   	1	  69
세븐라이너다리마시지기           70	   0	   70
화장대	                         700	1     	699
	                            1000	7	    993

이렇게 나옵니다 그러나 제가원하는값은 
   누적당첨자수까지구가하고싶네요
제가 한쿼리는 특정한날짜로 조회를 했는데 그건 그거대로 조회를 하는데
테이블에 있는 당첨자수를 누적으로 보여주고싶어요  도와주세요 ㅜㅜ
아래 제가 원하는값입니다

   경품명                     경품수  당첨자수 남은수량  *누적당첨자수*

LG트롬스타일러	                  10	1	9
SMEG냉장고	                     10    	1	9
고프로카메라	                    20        1	19
발뮤다공기청정기	               30	1	29
다이슨헤어드라이기	               40	1	39
마샬스피커	                       50	0	50
드롱기커피포트	                  70	1	69
세븐라이너다리마시지기            70	0	70
화장대	                             700	1	699
	                                   1000	7	993

 

by 스티브1조 [2018.03.10 16:10:53]

답좀 주세요 ㅜ


by 마농 [2018.03.12 08:17:28]
SELECT giftNm         경품명
     , SUM(giftCnt)   경품수
     , SUM(winCnt )   당첨자수
     , SUM(remainCnt) 남은수량
     , SUM(SUM(winCnt)) OVER(PARTITION BY GROUPING(giftNm) ORDER BY SUM(giftCnt), giftNm) 누적당첨자수
  FROM (SELECT a.scratch_gift_nm      AS giftNm
             , a.gift_ready_cnt       AS giftCnt
             , NVL(b.gift_win_cnt, 0) AS winCnt
             , a.gift_ready_cnt - NVL(b.gift_win_cnt, 0) AS remainCnt
          FROM evt_scratch_gift a
             , (SELECT scratch_gift_cd
                     , COUNT(*) gift_win_cnt
                  FROM evt_scratch_win
                 WHERE win_dtm BETWEEN '20180402' AND '20180404'
                 GROUP BY scratch_gift_cd
                ) b
         WHERE a.scratch_gift_cd = b.scratch_gift_cd(+)
        )
 GROUP BY ROLLUP(giftNm)
;

 


by 스티브1조 [2018.03.12 09:15:00]

누적당첨수는 어떤기준에서 나온결과인가요??? 

제가원하는결과는 4월2일부터 4월4일까지 당첨자는 당첨자수가나오면 대구 누적당첨자는 날짜와상관없이 나오게하는거였습니다 마농형님 ㅜㅜ


by 마농 [2018.03.12 09:27:29]
SELECT giftNm         경품명
     , SUM(giftCnt)   경품수
     , SUM(winCnt1)   당첨자수
     , SUM(remainCnt) 남은수량
     , SUM(winCnt2)   누적당첨자수
  FROM (SELECT a.scratch_gift_nm AS giftNm
             , a.gift_ready_cnt  AS giftCnt
             , NVL(b.winCnt1, 0) AS winCnt1
             , NVL(b.winCnt2, 0) AS winCnt2
             , a.gift_ready_cnt - NVL(b.winCnt1, 0) AS remainCnt
          FROM evt_scratch_gift a
             , (SELECT scratch_gift_cd
                     , COUNT(CASE WHEN win_dtm BETWEEN '20180402' AND '20180404' THEN 1 END) winCnt1
                     , COUNT(*) winCnt2
                  FROM evt_scratch_win
                 GROUP BY scratch_gift_cd
                ) b
         WHERE a.scratch_gift_cd = b.scratch_gift_cd(+)
        )
 GROUP BY ROLLUP(giftNm)
 ORDER BY 경품수
;

 


by 스티브1조 [2018.03.12 09:51:41]

감사합니다

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