CLASS

[더비's 퀴즈] SQL로 로또번호 생성하기

일반태그: 퀴즈.DB태그: Oracle. 5 Comments 2014년 10월 13일 607 (8)

아래의 SQL을 가지고 로또번호를 생성해 봅시다.

    – ? 부분에 들어갈 적절한 함수를 찾으세요.

 

1.문제 풀이

2.풀이 과정

3.결과

 

10월 24일 정답을 올리도록 하겠습니다.

5개의 댓글이 등록되었습니다.
  1. 더비 첫 퀴즈게시물에 재미난 문제를 내준 김지룡 대리님께 감사드립니다.
    이 문제를 통해 나온 로또번호로 이번주에 당첨되면 좋겠네요 ^^

    답은 2가지 버전으로 접근해 보았으며, 참고로 PIVOT 키워드를 사용하여 11g 이상 수행이 가능합니다.

    1. UNION ALL 활용 버전
    - UNION ALL 키워드를 사용하여 수행했는데 단점은 게임횟수를 상수로 넣어야 해서 프로그래밍적으로는 문제가 있는 버전입니다.

    2. 게임횟수 도입
    - 게임횟수를 도입하여 Input 값에 따라 로또게임 횟수만큼 출력되도록 하였으며 총 12회를 진행해 보았습니다.

    일단 원하는 결과는 나왔는데 다른분들이 접근하는 방법도 기대가 됩니다.

    앞으로도 재마난 퀴즈 많이 제공해 주시기 바랍니다.

    감사합니다.

  2. * 지룡대리가 준 Sample 데이타를 보면 5게임으로 한정 되어 있지만.. 저는 10게임으로 했습니다^^

    1. 로또 번호를 생성 하기 위해 필요한 데이타를 생성 합니다.

    2. 열로 구성되어 있는 데이터를 행으로 만들기 위한 기준 데이터 생성

    3. 열로 되어 있는 것을 행으로 데이터 변환.(CASE함수를 써도 무방함.)

    위 결과를 보면 우리가 원하는 결과 값으로 나오지 않고 NULL 값과 함께 나오게 됩니다.
    이유는 오라클은 행 단위로 데이터를 처리 하기 때문 인데요.. DELCODE 함수를 통해 행으로 변형 할때..
    DECODE(HEIGHT, 1, NUM) AS “No1″ < -- 해당 조건에서 HEIGHT = 1 조건에 만족하는 값 리턴, 조건에 만족하지 않는 값은 NULL 값으로 치환을 합니다. 만일 DECODE(HEIGHT, 1, NUM, 0) AS "No1" 로 쓰게 되면.. NULL값대신.. 0라는 숫자가 찍힐 것 입니다. 결론적으로 위 결과는 우리가 원하는 결과의 값이 아닙니다. 그래서 이를 해결하기 위해.. 그룹함수를 이용하여.. 해결 할 수 있습니다. 그룹함수의 특징 중 하나가 NULL값을 취급하지 않습니다. GAME컬럼을 기준으로 No1 컬럼을 그룹을 묶게 되면 NULL값을 제외한 나머지 값.. 즉, 값만 리턴하게 될 것입니다. 아래 결과를 확인 합시다.. 4. 최종 결과....

    GAME이라는 값을 그룹핑하여 그룹함수를 써줌으로써 NULL값은 해결되고.. 우리가 원하는 결과가 나오게 됩니다. 감사합니다.

  3. 집에 Oracle 10g가 깔려있어서.. 10g기준으로 작성하였습니다 ^^;

    (답글을 늦게 올려 죄송합니다..)

  4. -로또 번호 생성 퀴즈 풀이 및 정답

김수영 에 응답 남기기 응답 취소

댓글작성시 Code-Highlighter 삽입방법