로또 번호 카운트 쿼리좀 부탁드립니다 ㅠ.ㅠ 0 3 505

by 민수홍 [2019.09.23 16:43:37]


현재 테이블은

    

테이블 명 : number_table

회차 /  첫번째공    /  두번째공     /     세번째공       /     네번째공       /    다섯번째공    /     여섯번째공   /   보너스공     /

컬럼명 : HIT_EP / HIT_NUMBER1 / HIT_NUMBER2 / HIT_NUMBER3 / HIT_NUMBER4 / HIT_NUMBER5 / HIT_NUMBER6/HIT_BOUNS

내용  :   876  /           5            /         16       /           21       /       26          /       34          /          42       /     24      /

내용  :   875  /           19          /         22      /           30      /             34     /         39       /             44    /       36      /

내용  :   874  /            1          /         15      /           19      /             23       /       28       /             42     /       32      /

내용  :   873 /          3             /         5       /           12      /             13       /       33        /            39     /       38      /

내용  :   872  /        2              /       4        /           30       /             32       /     33          /             43   /        29      /

.....

 

1회 부터 876 이런식으로 구성이 되어 있습니다.

제가 하고 싶은것은 50회차 버튼을 클릭하면 rownum<=50 가게 되어서 876에서 826회차까지 데이터를 불러오게 됩니다.

select * from number_table

where rownum<=50;

 

위에 처럼 테이블이 불러와지면

1번 공이 몇개

2번 공이 몇개

3번 공이 몇개

...

45번 공 몇개

나왔는지 카운트를 하고 싶은데 어떻게 해야 할지 감이 잡히지 않습니다....

 

방안을 알고 계신분이 있으시면 힌트 좀 부탁드리겠습니다

by jkson [2019.09.23 17:08:37]

with t as
(
select '876' as het_ep, 5 as hit_number1, 16 as hit_number2, 21 as hit_number3, 26 as hit_number4, 34 as hit_number5, 42 as hit_number6, 24 as hit_bonus from dual union all
select '875' as het_ep, 19 as hit_number1, 22 as hit_number2, 30 as hit_number3, 34 as hit_number4, 39 as hit_number5, 44 as hit_number6, 36 as hit_bonus from dual union all
select '874' as het_ep, 1 as hit_number1, 15 as hit_number2, 19 as hit_number3, 23 as hit_number4, 28 as hit_number5, 42 as hit_number6, 32 as hit_bonus from dual
)
select ball_num, count(1) cnt
  from
(
select *
  from  
    (select *
      from t
     --where rownum <= 3 --조회조건
    )
 unpivot (ball_num for gb in (hit_number1, hit_number2, hit_number3, hit_number4, hit_number5, hit_number6, hit_bonus))
)
 group by ball_num
 order by ball_num

by 민수홍 [2019.09.23 17:33:00]

 

jkson  주신 쿼리에서

order by cnt desc를 해서 10개만 추출하고 싶으면 어떻게 추가를 해야 할까요 ? ㅠ.ㅠ


by 마농 [2019.09.25 09:17:38]
WITH number_table
( hit_ep
, hit_number1, hit_number2, hit_number3, hit_number4, hit_number5, hit_number6
, hit_bouns
) AS
(
          SELECT 876,  5, 16, 21, 26, 34, 42, 24 FROM dual
UNION ALL SELECT 875, 19, 22, 30, 34, 39, 44, 36 FROM dual
UNION ALL SELECT 874,  1, 15, 19, 23, 28, 42, 32 FROM dual
UNION ALL SELECT 873,  3,  5, 12, 13, 33, 39, 38 FROM dual
UNION ALL SELECT 872,  2,  4, 30, 32, 33, 43, 29 FROM dual
)
SELECT *
  FROM (SELECT hit_number
             , COUNT(*) cnt_tot
             , COUNT(DECODE(gb, 'HIT_BOUNS', null, 1)) cnt_hit
             , COUNT(DECODE(gb, 'HIT_BOUNS', 1)) cnt_bouns
             , ROW_NUMBER() OVER(ORDER BY COUNT(DECODE(gb, 'HIT_BOUNS', null, 1)) DESC
                                        , COUNT(DECODE(gb, 'HIT_BOUNS', 1)) DESC
                                        , hit_number
                                        ) rn
          FROM (SELECT *
                  FROM (SELECT *
                          FROM number_table
                         ORDER BY hit_ep DESC
                        )
                 WHERE rownum <= 50
                )
         UNPIVOT (hit_number FOR gb IN ( hit_number1, hit_number2, hit_number3
                                       , hit_number4, hit_number5, hit_number6
                                       , hit_bouns
                                       ) )
         GROUP BY hit_number
        )
 WHERE rn <= 10
;

 

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