안녕하세요. 아래 테이블에서 시험문제 출제시, 한 시험 순번(EXAM_ORDER)에 여러개의 문제(EXAM_NO)가 있을때 EXAM_ORDER당 한개의 문제(EXAM_NO)만 랜덤으로 출력해 주고 싶은데
그게 잘 되지를 않습니다. 고수님들 도와 주세요.
TB_EXAM_CONT 테이블(현재 들어 있는 Data)
EXAM_ID | EXAM_ORDER | EXAM_NO | CONTENTS |
1 | 1 | 1 | 1+1=2 |
1 | 1 | 2 | 1+2=3 |
1 | 1 | 3 | 1+3=4 |
1 | 2 | 1 | 2+1=1 |
1 | 2 | 2 | 2+2=2 |
1 | 3 | 1 | 2+3=3 |
1 | 3 | 2 | 2+4=3 |
제가 작성했던 쿼리문은 아래와 같습니다.
SELECT EXAM_ID,
EXAM_ORDER,
EXAM_NO,
CONTENTS
FROM TB_EXAM_CONT A
WHERE A.EXAM_ID = 1
AND A.EXAM_NO =
(SELECT ROUND (MIN(EXAM_NO)+(RAND()*(MAX(EXAM_NO)-MIN(EXAM_NO)))) EXAM_NO
FROM TB_EXAM_CONT
WHERE EXAM_ID = A.EXAM_ID
AND EXAM_ORDER = A.EXAM_ORDER
)
--최종적으로 얻고자 하는 출력 결과는 아래와 같습니다.문제번호는 랜덤으로 하나만 출력되게)
EXAM_ID | EXAM_ORDER | EXAM_NO | CONTENTS |
1 | 1 | 3 | 1+3=4 |
1 | 2 | 1 | 2+1=1 |
1 | 3 | 2 | 2+4=3 |
그럼 고수님들의 답변 부탁 드립니다.
감사합니다.
-- 1. MySQL 8.0 이상 분석함수 사용(표준) SELECT * FROM (SELECT exam_id, exam_order, exam_no, contents , ROW_NUMBER() OVER(PARTITION BY exam_id, exam_order ORDER BY RAND()) rn FROM tb_exam_cont WHERE exam_id = 1 ) a WHERE rn = 1 ; -- 2. Group By 사용(비표준 : MySQL 에서만 허용되는 Group By 구문) SELECT * FROM (SELECT * FROM tb_exam_cont WHERE exam_id = 1 ORDER BY RAND() ) a GROUP BY exam_id, exam_order ;