by 쿼리잘짜고싶어요 [2023.06.23 10:52:34]
안녕하세요.
설문조사 관련하여 분야별 점수 및 종합점수를 구하는 쿼리를 작성하려고하는데
도움부탁드립니다
각 (1)질문1 및 (2)질문2에 대하여 5문항으로 되어있고 매우만족(100점) / 만족(80점) / 보통(60) / 불만족(40) / 매우불만족(20)
이렇게 선택을 할 수 있습니다.
| 조사항목 | 질문내용 | 점수 | 분야별점수 | 종합점수 |
| 질문1 | (1) 질문1 | |||
| (2) 질문2 | ||||
| 질문2 | (1) 질문1 | |||
| (2) 질문2 | ||||
| 질문3 | (1) 질문1 | |||
| (2) 질문2 | ||||
| 질문4 | (1) 질문1 | |||
| (2) 질문2 | ||||
| 질문5 | (1) 질문1 |
-----------------------------------------------------------------------------------------------
해당 설문조사 정보 테이블에는 다음과 같이 데이터가 들어가있습니다.
설문관리번호 / 질문순번 / 항목순번
20230001 / 1 / 1
20230001 / 1 / 2
20230001 / 2 / 1
20230001 / 2 / 2
현재 점수평균은 구한상태입니다.
점수 평균 같은 경우에는 각 질문의 항목에 대해 점수컬럼이 없기에 이런식으로 구했습니다.
SELECT 질문순번
, TRUNC((AVG(CASE 항목순번 WHEN '1' THEN 100
WHEN '2' THEN 80
WHEN '3' THEN 60
WHEN '4' THEN 40
WHEN '5' THEN 20
ELSE 0 END)), 1) AS 점수
FROM 테이블
WHERE 설문관리번호 = '20230001'
GROUP BY 질문순번
분야별점수와 종합점수를 구해야하는데 어떤식으로 구해야할지 감이 안옵니다..
도움좀 부탁드립니다. 현재 작업하고 있는 DB는 Tibero입니다.
원본 대비 결과표를 좀더 명확하게 표현해 주셔야 합니다.
SELECT 조사항목
, 질문순번
, TRUNC(AVG(v), 1) 점수
, TRUNC(AVG(AVG(v)) OVER(PARTITION BY 조사항목), 1) 분야별점수
, TRUNC(AVG(AVG(v)) OVER(), 1) 종합점수
FROM (SELECT 조사항목
, 질문순번
, CASE 항목순번 WHEN 1 THEN 100
WHEN 2 THEN 80
WHEN 3 THEN 60
WHEN 4 THEN 40
WHEN 5 THEN 20
ELSE 0 END v
FROM 테이블
WHERE 설문관리번호 = '20230001'
) a
GROUP BY 조사항목, 질문순번
;