현재 테이블은
테이블 명 : 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번 공 몇개
나왔는지 카운트를 하고 싶은데 어떻게 해야 할지 감이 잡히지 않습니다....
방안을 알고 계신분이 있으시면 힌트 좀 부탁드리겠습니다
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
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 ;