반응형
만든배경
꽤 오래전에..
일하다가 문득 생각이 들었다.
(꽤나 하기 싫었었나보다.. ㅎㅎ)
데이터 없이 쿼리로만 로또를 뽑아주는 쿼리를 만들면 어떨까? 하고 생각이 들었다.
connect by 로 숫자를 생성하고 랜덤으로 숫자를 발생시키면 되지 않을까?
그래서 구상해봤다..

내용은 이렇다.
1번부터 45번까지 번호표를 든 사람들이 있다고 치자.
이들에게 랜덤으로 발생된 숫자를 나눠주고,
1등부터 6등까지 앞에 세우면 그들이 로또번호가 된다... ㅎㅎㅎ
그렇다.
이렇게 5팀 만들면 로또 한장이 나오는것이다.
바로 쿼리를 만들어보았다. ^^;

아래는 그 쿼리다.. ㅎㅎ
로또 번호 생성(추출) 쿼리 - 오라클(Oracle)
-- 로또번호 추출(생성) 쿼리 - 오라클(Oracle)
SELECT A.PG AS NO
, MAX(DECODE(A.RN, 1, A.RNK, 0)) AS "1"
, MAX(DECODE(A.RN, 2, A.RNK, 0)) AS "2"
, MAX(DECODE(A.RN, 3, A.RNK, 0)) AS "3"
, MAX(DECODE(A.RN, 4, A.RNK, 0)) AS "4"
, MAX(DECODE(A.RN, 5, A.RNK, 0)) AS "5"
, MAX(DECODE(A.RN, 6, A.RNK, 0)) AS "6"
FROM (
SELECT A.PG
, RANK() OVER(PARTITION BY A.PG ORDER BY A.RNK) AS RN
, A.RNK
FROM (
SELECT A.PG
, A.RN
, RANK() OVER(PARTITION BY A.PG ORDER BY A.VL, A.RN) AS RNK
FROM (
SELECT -- 5팀
TRUNC((ROWNUM-1) / 45) + 1 AS PG
-- 1 ~ 45 번호표
, MOD(ROWNUM - 1, 45) + 1 AS RN
-- 랜덤으로 받은 숫자
, DBMS_RANDOM.VALUE(1, 100) AS VL
FROM DUAL
CONNECT
BY LEVEL <= 45 * 5 -- 1~45번호표 x 5팀
) A
ORDER
BY 1, 2, 3
) A
WHERE A.RN BETWEEN 1 AND 6
) A
GROUP
BY A.PG
;
쿼리결과
로또번호생성기 같은 프로그램에서는 지금까지 당첨번호된 번호를 바탕으로 패턴을 분석하고 예측하는 알고리즘(?)이 있겠지..??
이 쿼리에는 데이터가 없으니, 그런건 없다. ㅎㅎ
반응형
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 문자열에서 콤마(,) 단위로 행(row)으로 분리하는 쿼리 (콤마별 행분리) (68) | 2023.02.06 |
---|---|
Oracle] 전화번호 형식으로 변환하는 쿼리 (하이픈 넣어주는 쿼리) (36) | 2022.12.30 |
Oracle] 숫자 데이터만 추출하기 (21) | 2022.12.29 |
[ORACLE] 오라클 SQL 만년 달력 만들기 - 이번달 + 날짜지정(특정일자) (12) | 2022.12.29 |
[Oracle] 근속년수 조회 - 년수 / 개월수 / 일수 계산 쿼리 (10) | 2022.12.29 |