|
1. 질문
로또 번호 1등에 가장 가까운 수는 어떤 수 일까?
2. 참고data
1회~805회 까지의 로또 추첨 데이터(http://www.nlotto.co.kr/gameResult.do?method=statByNumber)
지금껏 1등이 당첨된 매장 데이터 (http://www.nlotto.co.kr/store.do?method=sellerInfo645)
lotto_loc_2countUP.xlsx
3. 테이블생성스크립트
CREATE TABLE SCOTT.LOTTO (
WEEKS_ VARCHAR2(30) ,
DAY_ VARCHAR2(30) ,
WIN1PEOPLE VARCHAR2(30) ,
WIN1MONEY VARCHAR2(30) ,
WIN2PEOPLE VARCHAR2(30) ,
WIN2MONEY VARCHAR2(30) ,
WIN3PEOPLE VARCHAR2(30) ,
WIN3MONEY VARCHAR2(30),
WIN4PEOPLE VARCHAR2(30) ,
WIN4MONEY VARCHAR2(30) ,
WIN5PEOPLE VARCHAR2(30),
WIN5MONEY VARCHAR2(30) ,
LINENUM1 VARCHAR2(30) ,
LINENUM2 VARCHAR2(30),
LINENUM3 VARCHAR2(30) ,
LINENUM4 VARCHAR2(30) ,
LINENUM5 VARCHAR2(30) ,
LINENUM6 VARCHAR2(30) ,
BONUSNUM VARCHAR2(30)
)
CREATE TABLE SCOTT.LOTTO_LOC (
NUM NUMBER(20) ,
NAME VARCHAR2(80) ,
WIN_CNT NUMBER(10) ,
LOC VARCHAR2(400)
)
4. 분석쿼리
set serveroutput on
set verify off
declare
v_num varchar2(40);
v_cnt number(20);
cursor CS_cnt is
select num, COUNT(*) cnt
from (
select linenum1 num from lotto union all
select linenum2 num from lotto union all
select linenum3 num from lotto union all
select linenum4 num from lotto union all
select linenum5 num from lotto union all
select linenum6 num from lotto) Q
group by num
order by cnt desc;
begin
dbms_output.put_line('지금껏 나왔던 번호들의 횟수');
open CS_cnt;
loop
fetch CS_cnt into v_num,v_cnt;
dbms_output.put_line(v_num ||'번은 '||v_cnt||'번 나왔습니다.');
exit when CS_cnt%notfound;
end loop;
close CS_cnt;
end;
/
--지금껏 나온 숫자중 높은 순서대로 보여줌(선택 번호 참고용)
accept like_num1 prompt 'what do you like number? if no have number , write 0 plz : '
accept like_num2 prompt 'what do you like number? if no have number , write 0 plz : '
accept like_num3 prompt 'what do you like number? if no have number , write 0 plz : '
accept like_num4 prompt 'what do you like number? if no have number , write 0 plz : '
accept like_num5 prompt 'what do you like number? if no have number , write 0 plz : '
accept like_num6 prompt 'what do you like number? if no have number , write 0 plz : '
declare
--cnt number(20):= 0;
stack varchar2(800) := ' ';
num1 varchar2(20); num2 varchar2(20); num3 varchar2(20);
num4 varchar2(20); num5 varchar2(20); num6 varchar2(20);
--각 라인별로 제일 많이 나온 숫자들
bestnum1 number(10) := 14; bestnum2 number(10) := 15; bestnum3 number(10) := 27;
bestnum4 number(10) := 31; bestnum5 number(10) := 37; bestnum6 number(10) := 40;
--모든 라인중에서 가장 많이 나온 숫자들
likenum1 number(10) := &like_num1; likenum2 number(10) := &like_num2; likenum3 number(10) := &like_num3;
likenum4 number(10) := &like_num4; likenum5 number(10) := &like_num5; likenum6 number(10) := &like_num6;
--고른 숫자들
sparenum1 number(10) := 34; sparenum1 number(10) := 20; sparenum1 number(10) := 115;
sparenum1 number(10) := 12; sparenum1 number(10) := 43; sparenum1 number(10) := 5;
--중복시 대신할 스페어 키
begin
select linenum1 into num1
from (
select linenum1,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum1
order by cnt desc
)
where rownum = 1;
select linenum2 into num2
from (
select linenum2,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum2
order by cnt desc
)
where rownum = 1;
select linenum3 into num3
from (
select linenum3,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum3
order by cnt desc
)
where rownum = 1;
select linenum4 into num4
from (
select linenum4,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum4
order by cnt desc
)
where rownum = 1;
select linenum5 into num5
from (
select linenum5,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum5
order by cnt desc
)
where rownum = 1;
select linenum6 into num6
from (
select linenum6,count(*) cnt
from lotto
where WIN1PEOPLE <= 5
group by linenum6
order by cnt desc
)
where rownum = 1;
--5명 이하의 당첨회차중 각 라인들의 제일 높은 번호
if likenum1 != 0 then
stack := stack ||' '||likenum1;
end if;
if likenum2 != 0 then
stack := stack ||' '||likenum2;
end if;
if likenum3 != 0 then
stack := stack ||' '||likenum3;
end if;
if likenum4 != 0 then
stack := stack ||' '||likenum4;
end if;
if likenum5 != 0 then
stack := stack ||' '||likenum5;
end if;
if likenum6 != 0 then
stack := stack ||' '||likenum6;
dbms_output.put_line(stack);
end if;
--뽑은 숫자들 합치는 부분
if likenum1 = 0 then
dbms_output.put_line(bestnum1||' '||bestnum2||' '||bestnum3||' '||bestnum4||' '||bestnum5||' '||bestnum6);
--제일 당첨된 수가 많은 숫자들 : 5등이라도 당첨될수 있도록
dbms_output.put(num1||' '||num2||' '||num3||' '||num4||' '||num5||' '||num6);
--너가 뽑은 숫자는 없으니 각 라인별로 나온 최고의 숫자들을 뽑아줌
elsif likenum2 = 0 then
dbms_output.put_line(stack||' '||bestnum2||' '||bestnum3||' '||bestnum4||' '||bestnum5||' '||bestnum6);
dbms_output.put(stack||' '||num2||' '||num3||' '||num4||' '||num5||' '||num6);
elsif likenum3 = 0 then
dbms_output.put_line(stack||' '||bestnum3||' '||bestnum4||' '||bestnum5||' '||bestnum6);
dbms_output.put(stack||' '||num3||' '||num4||' '||num5||' '||num6);
elsif likenum4 = 0 then
dbms_output.put_line(stack||' '||bestnum4||' '||bestnum5||' '||bestnum6);
dbms_output.put(stack||' '||num4||' '||num5||' '||num6);
elsif likenum5 = 0 then
dbms_output.put_line(stack||' '||bestnum5||' '||bestnum6);
dbms_output.put(stack||' '||num5||' '||num6);
elsif likenum6 = 0 then
dbms_output.put_line(stack||' '||bestnum6);
dbms_output.put(stack||' '||num6);
end if;
dbms_output.new_line;
end;
/
accept your_loc prompt 'your_loc_current : '
declare
near_loc varchar2(400);
begin
select loc into near_loc
from lotto_loc
where loc like '%&your_loc%' ;
dbms_output.put_line('너의 가장 가까운 매장은 '||near_loc);
end;
/
5. 결과화면
6. 결론
실제 로또 여러 분석방들이 있고 그 분석방 마다 자신들만의 방법으로 번호를 추출해 내는데 여러가지 방법중 나의 방법으로는 지금껏 나온 숫자들의 빈도수를 통해 그 숫자를 우선적으로 뽑아주는 방법으로 번호를 분석해 보았다.
그러나 사실 로또는 독립 시행이므로 이전것들의 번호는 이번 사건의 결과에 별 영향을 미치지 못한다.
|