oracle 쿼리 질문 0 4 458

by 물들어 [Oracle 기초] [2020.07.31 14:09:03]


1.PNG (14,001Bytes)

SELECT A.WORK_DT, A.FAC_ID , A.GRADE_CD  
     , COUNT(*) GRADE_CD_CNT
     , ROUND(
       RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY GROUPING(A.GRADE_CD))
       * 100, 1) GRADE_CD_PCT
  FROM QUAL_DAILYLOTGRADE_SUM A
 WHERE 1=1
 AND A.FAC_ID = 'ICPRB'
 AND A.WORK_DT = '20200702'
 GROUP BY A.WORK_DT, A.GRADE_CD, A.FAC_ID
 ORDER BY A.WORK_DT, A.GRADE_CD, A.FAC_ID
;

해당 날짜 선택해서  GRADE_CD 컬럼에 대한 데이터들을 카운트하여 백분율 내주는 쿼리입니다.

저기서 

 AND A.WORK_DT <= '20200702'
 AND A.WORK_DT >= '20200628'  이렇게 AND절을 추가하게되면

 

추출된 데이터 모두가 날자별로 끊어지는게 아니고 GRADE_CD 컬럼 데이터 전체가  백분율이 됩니다..

제가 원하는건 FROM TO 까지 선택한 날자별로 백분율이 딱딱딱 나오게 하고싶은데요 도저히 머리가 안굴러가네요 ㅜㅜ 

EX) 20200628일자 데이터들 백분율/ 20200629일자 데이터들 백분율/ / / / 이렇게 나오게 하고싶습니다.

부탁드립니다.

 

 

 

by 마농 [2020.07.31 15:10:40]

질문글이 선듯 와 닿지를 않네요.
글로 서술하는것 보다는 표로 보여주시는게 좋을 것 같습니다.
원본 대비 결과표를 보여주세요.


by JYK94 [2020.07.31 15:13:38]

  SELECT A.WORK_DT
             , COUNT ( * ) GRADE_CD_CNT
             , ROUND ( RATIO_TO_REPORT ( COUNT ( * ) ) * 100, 1 ) GRADE_CD_PCT
	FROM QUAL_DAILYLOTGRADE_SUM A
   WHERE 1 = 1 AND A.FAC_ID = 'ICPRB' AND A.WORK_DT = '20200702'
GROUP BY A.WORK_DT
ORDER BY A.WORK_DT

작성하신 쿼리는 GROUP BY가 DT, ID, CD로 걸려있어 첨부하신 이미지 처럼 나타나고 있습니다.

원하시는게 이 쿼리가 맞나요?


by 마농 [2020.07.31 15:32:33]

1. GROUPING 함수는 롤업이나 큐브를 사용했을 때 사용하는 함수인데?
 - 롤업을 이용하지 않고 그냥 썼네요? 어떤 의도로 사용한 것인지?
 - 불필요한 구문이 아닐지?
2. 전체 백분율이 아닌 날짜별 백분율을 원한다면?
 - PARTITION BY a.work_dt


by 물들어 [2020.07.31 16:42:51]

날짜별 백분율은  올려주신 답변으로 해결했습니다 감사합니다! 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입