테이블 check,score의 필드가 다음과 같이 구성되어 있다고 할때
ID, CHECKER, ENG, MATH
채점자(CHECKER)5명이 과목별로 참가자(ID)의 점수를 채점해서 check테이블에 입력했을때
(check테이블의 PK는 CHECKER와 ID)
check테이블에서 과목별로 채점자 점수의 평균값을 구하여 score테이블에 입력하고 싶은데
그러니까 ID 1번이 CHECKER1~5에게 받은 점수의 평균값 말이지요.
with Qcheck do begin
close;
sql.clear;
sql.add('select AVG(eng) as eng from check group by ID');
Open;
eng := FieldByName('eng').AsInteger;
end;
이런식으로 하면
eng := FieldByName('eng').AsInteger 의 결과값이 id별로 여러개가 돌아오는데
그걸 하나씩 아이디순으로 테이블 score에 저장하려면
어떻게 써줘야 하나요?
아시는 분 도움 부탁드립니다.
예를들어 DB는 ORACLE에 Score의 구성Field가 ID, ENG_AVG, MATH_AVG라고 가정하면
INSERT INTO SCORE(ID, ENG_AVG, MATH_AVG)
SELECT ID, DECODE(SUM(NVL(ENG,0)),0,0,SUM(NVL(ENG,0))/COUNT(CHECKER)),
DECODE(SUM(NVL(MATH,0)),0,0,SUM(NVL(MATH,0))/COUNT(CHECKER))
FROM CHECK
GROUP BY ID;
혹은
INSERT INTO SCORE(ID, ENG_AVG, MATH_AVG)
SELECT ID, AVG(ENG), AVG(MATH)
FROM CHECK
GROUP BY ID;
라고 하면 어떨까요.
혹시나 해서 참고설명을 드립니다.
DECODE는 Query문장에서 사용하는 IF문장이라 할 수 있습니다
예) DECODE(A,'1','Yes','2','No','All') AS KKK
==> IF A = '1' THEN KKK := 'Yes'
ELSE IF A = '2' THEN KKK := 'No'
ELSE KKK := 'All'
질문하신 내용에 대답이