쿼리 좀 봐 주세요.

쿼리 좀 봐 주세요.

QA

쿼리 좀 봐 주세요.

본문

교과 등급평균을 구하는 쿼리문인데 좀 더 간단한 방법이 없을까요. 뭔가 지저분한 느낌이...

 

 select 
(sum(case when (grade > 0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학')) then grade_hab else 0 end)/sum(case when (grade > 0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학')) then danwisu else 0 end)) as sum1,    
(sum(case when (grade >0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or left(gyoga_1,2) = '사회')) then grade_hab else 0 end)/sum(case when (grade >0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or left(gyoga_1,2) = '사회')) then danwisu else 0 end)) as sum2,    
(sum(case when (grade > 0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or gyoga_1 = '과학')) then grade_hab else 0 end)/sum(case when (grade > 0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or gyoga_1 = '과학')) then danwisu else 0 end)) as sum3,    
(sum(case when (grade >0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or left(gyoga_1,2) = '사회' or gyoga_1 = '과학')) then grade_hab else 0 end)/sum(case when (grade >0 and (gyoga_1 = '국어' or gyoga_1 = '영어' or gyoga_1 = '수학' or left(gyoga_1,2) = '사회' or gyoga_1 = '과학')) then danwisu else 0 end)) as sum4, 
(sum(case when grade > 0 then grade_hab else 0 end)/sum(case when  grade > 0 then danwisu else 0 end)) as sum5 
from {$table_sungjuk} where stu_id = $stu_id

이 질문에 댓글 쓰기 :

답변 2

아래처럼 하시면 될듯 합니다.


SELECT
    SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학'))) THEN grade_hab ELSE 0 END) / SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학'))) THEN danwisu ELSE 0 END) AS sum1,
    SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '사회') OR LEFT(gyoga_1, 2) = '사회')) THEN grade_hab ELSE 0 END) / SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '사회') OR LEFT(gyoga_1, 2) = '사회')) THEN danwisu ELSE 0 END) AS sum2,
    SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '과학'))) THEN grade_hab ELSE 0 END) / SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '과학'))) THEN danwisu ELSE 0 END) AS sum3,
    SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '사회', '과학') OR LEFT(gyoga_1, 2) = '사회'))) THEN grade_hab ELSE 0 END) / SUM(CASE WHEN (grade > 0 AND (gyoga_1 IN ('국어', '영어', '수학', '사회', '과학') OR LEFT(gyoga_1, 2) = '사회'))) THEN danwisu ELSE 0 END) AS sum4,
    SUM(CASE WHEN grade > 0 THEN grade_hab ELSE 0 END) / SUM(CASE WHEN grade > 0 THEN danwisu ELSE 0 END) AS sum5
FROM
    {$table_sungjuk}
WHERE
    stu_id = $stu_id;

너무 복잡해서 챗gpt에 질문하시는게 더 빠른 답변 받으실 듯 합니다.^^;

답변을 작성하시기 전에 로그인 해주세요.
전체 123,860 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT