database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6697 게시물 읽기
No. 6697
기존에 출제 되지 않은 문제를 가져오는 쿼리에 대한 문의 드립니다.
작성자
채다현
작성일
2013-07-17 12:09ⓒ
2013-07-17 16:12ⓜ
조회수
7,969

안녕하세요 며칠째 끙끙앓다가 문의 드립니다;;

/* 

답변을 보고 추가로 말씀드립니다. 답변의 내용을 생각안한 것은 아니나.. 추가적인 조건이 있네요 ㅜ

가령 학생테이블에 출제된 문제의 수가 제한이 있다는 것입니다.

다른 테이블에 등록되어 있는 값인데요

가령 문제유형 [객관식] 난이도 [상] 은 5문제

         문제유형 [객관식] 난이도 [중]은 3문제 식으로 구현이 되어 있는데...

이렇게 학생 테이블에 출제된 난이도별로 출제되지 않는 문제를 내는 join 등의 쿼리가 있을까요?

*/

테이블은 두개입니다

학생 답안 테이블과 문제은행 테이블

제가 원하는 것은 아래 표 처럼 학생 답안 테이블과 문제은행 테이블을 조인해서 기존에 출제된 문제말고

다른 문제를 보여주는 것입니다.

join 을 통해 값을 가져오려고 했으나 키값(문제번호)가 다른 것을 어떻게 조인해서 기존에 출제되지 않은 문제를 가져올 수 있을까요?

 

 

 

학생테이블       문제은행      
문제번호 문제유형 난이도     문제번호 문제유형 난이도 출제여부
1 객관식     1 객관식 출제
2 객관식     2 객관식 출제
3 객관식     3 객관식 출제
4 객관식     4 객관식 출제
5 주관식     11 주관식 미출제
6 주관식     12 주관식 미출제
7 주관식     13 주관식 미출제
8 주관식     14 주관식 미출제
9 주관식     15 주관식 미출제
10 서술형     16 서술형 미출제
                 
                 
                 
학생테이블   문제은행          
문제번호 문제유형 난이도 문제번호 문제유형 난이도 출제여부    
1 객관식 11 객관식 미출제    
2 객관식 12 객관식 미출제    
3 객관식 13 객관식 미출제    
4 객관식 14 객관식 미출제    
5 주관식 15 주관식 미출제    
6 주관식 16 주관식 미출제    
7 주관식 17 주관식 미출제    
8 주관식 18 주관식 미출제    
9 주관식 19 주관식 미출제    
10 서술형 20 서술형 미출제    

 

이 글에 대한 댓글이 총 5건 있습니다.

일단 전 초보라는걸 말씀드립니다..

저런형태로 하면 되지 않을까 해서 작성을 해보았습니다.

참고만 하시기 바랍니다.

* 보탬 : 참고가 안될 가능성이 상당히 농후합니다..

 

    Select 학생테이블2.학생
          ,문제테이블2.문제
      From
          (
            Select 문제
              From 문제테이블            
            Where Not Exists (        
                                 Select 'x'
                                   From 학생테이블           
                                  Where 학생테이블.문제 = 문제테이블.문제           
                              )
          ) 문제테이블2 Inner Join         
                                   (
                                     Select 학생
                                       From 학생테이블
                                      Where Not Exists (        
                                                          Select 'x'
                                                            From 문제테이블
                                                           Where 문제테이블.문제 = 학생테이블.문제           
                                                       )
                                   Group By 학생
                                   ) 학생테이블2 On 1 = 1
                                  

 

최한영(chy18)님이 2013-07-17 13:24에 작성한 댓글입니다.

질문이 잘 이해되지 않습니다.

학생테이블에 정의된 대로 문제가 출제가 되어야 한다는 얘기인가요?
즉, 객관식/상 3문제, 객관식/중 1문제, 주관식/중 2문제 주관식/하 3문제, 서술형/하 1문제
이렇게 출제하되 기존에 미출제된 문제이어야 한다는 조건이 아닐까 싶긴한데, 확신이 서지 않네요.

아래쪽에 있는 결과(?)는 학생테이블과 문제은행 테이블 간에 난이도도 틀리고 해서 말이죠.

우욱님이 2013-07-17 14:42에 작성한 댓글입니다. Edit

 우욱님 말씀이 맞습니다..

제가 예시로 든게 잘못된건데요.. 일단 말씀하신 것처럼

같은 난이도에 기존에 미출제된 문제여야 하고

또 덧붙이자면 위의 예시는 모든 학생을 가져오는게 아니라

한 학생을 기준으로 가져오는 것입니다.

 

다시 설명 드리자면 특정 학생의 기존에 출제된 문제를 재출제하고자 하는데

기존에 출제된 문제를 제외하고 재출제를 할려고 하는 것입니다 

 

제가 모호한 질문을 해드려서 죄송합니다;;

 

채다현님이 2013-07-17 16:06에 작성한 댓글입니다. Edit

DECLARE @학생 NCHAR(3)

;
SET @학생 = N'안중근'
;
 
WITH 문제테이블 ( 문제아이디, 문제유형, 난이도 )
AS
(
SELECT 1, N'객관식', N'상'
UNION ALL SELECT 2, N'객관식', N'상'
UNION ALL SELECT 3, N'주관식', N'상'
UNION ALL SELECT 4, N'주관식', N'상'
UNION ALL SELECT 5, N'서술형', N'상'
UNION ALL SELECT 6, N'서술형', N'상'
UNION ALL SELECT 7, N'객관식', N'중'
UNION ALL SELECT 8, N'객관식', N'중'
UNION ALL SELECT 9, N'주관식', N'중'
UNION ALL SELECT 10, N'주관식', N'중'
UNION ALL SELECT 11, N'서술형', N'중'
UNION ALL SELECT 12, N'서술형', N'중'
UNION ALL SELECT 13, N'객관식', N'하'
UNION ALL SELECT 14, N'객관식', N'하'
UNION ALL SELECT 15, N'주관식', N'하'
UNION ALL SELECT 16, N'주관식', N'하'
UNION ALL SELECT 17, N'서술형', N'하'
UNION ALL SELECT 18, N'서술형', N'하'
UNION ALL SELECT 19, N'서술형', N'중'
),
학생테이블( 학생아이디, 학생이름 )
AS
(
SELECT 1, N'안중근'
UNION ALL SELECT 2, N'유관순'
),
출제기록테이블( 학생아이디, 문제아이디 )
AS
(
--안중근은 1, 3번 문제를, 유관순은 2, 7번 문제를 이미 푼 경우
SELECT 1, 1
UNION ALL SELECT 1, 3
UNION ALL SELECT 2, 2
UNION ALL SELECT 2, 7
),
출제형식테이블( 순서, 유형, 난이도 )
AS
(
SELECT 1, N'서술형', N'중'
UNION ALL SELECT 2, N'객관식', N'상'
UNION ALL SELECT 3, N'서술형', N'중'
)
SELECT bb.문제아이디
FROM
(
SELECT RANK() OVER( PARTITION BY 유형, 난이도 ORDER BY 순서 ) AS rnk
, 순서, 유형, 난이도
FROM 출제형식테이블
) AS aa
INNER JOIN 
(
SELECT RANK() OVER( PARTITION BY prob.문제유형, prob.난이도 ORDER BY NEWID() ) AS rnk
, prob.문제유형, prob.난이도, prob.문제아이디
FROM 문제테이블 AS prob
LEFT JOIN 
학생테이블 AS st
INNER JOIN 출제기록테이블 AS hist 
ON st.학생아이디 = hist.학생아이디 AND st.학생이름 = @학생
ON prob.문제아이디 = hist.문제아이디
WHERE hist.학생아이디 IS NULL
) AS bb
ON aa.rnk = bb.rnk AND aa.유형 = bb.문제유형 AND aa.난이도 = bb.난이도
ORDER BY aa.순서
;
 
우욱님이 2013-07-17 17:26에 작성한 댓글입니다. Edit

 헐;;

우욱님 감사드립니다.

넘 복잡해서 선감사 및 선리플후 

분석해보겠습니다 ^^

채다현님이 2013-07-17 17:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6700transaction log 축소의 효과? [1]
조중규
2013-07-22
7365
6699엑셀문서를 DB에 insert [1]
DBDBDB
2013-07-22
7325
6698조회 문의좀요.. [5]
초보입니다.
2013-07-19
7482
6697기존에 출제 되지 않은 문제를 가져오는 쿼리에 대한 문의 드립니다. [5]
채다현
2013-07-17
7969
6696프로시저 인자값 관련 문의 드립니다. [1]
세균장군
2013-07-16
8191
6695포트 문제 [1]
박해일
2013-07-12
7329
6694하나의 자료를 업데이트하지않고.. 여러개를 한번에 수정 할 경우? [2]
우와
2013-07-11
8309
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다