안녕하세요. 도저히 고민을 해도 잘 몰라서 질문 드립니다. 0 6 1,102

by 마르스헤븐 [MySQL] [2021.03.18 12:00:32]


안녕하세요. 도전히 고민을 해도 잘모르는것이 있어서 질문 드립니다. 소중한 시간 내주셔서 늘 가르침을 주셔서 정말 감사하게 생각하고 있습니다.

버전은 5.6.25 이고요. 7일 평균을 구해야 하는데 전에 한번 가르쳐 주셧는데 0을 제외를 할려고 하니 잘 되지 않아 다시 질문 드립니다.

 

엑셀로우 일자 주차 합계 7일평균
1 2020/2/22 14 0  0  값이 0 인 경우 제외
2 2020/2/23 14 0  0  값이 0 인 경우 제외
3 2020/2/24 14 0  0  값이 0 인 경우 제외
4 2020/2/25 14 87 87 식 : D4 /1
87 /1= (87)
5 2020/2/26 14 70 157 식 : D4 + D5 /2
87 + 70 /2 =(78.5)
6 2020/2/27 14 77 234 식 : D4 + D5 + D6 /3
87 + 70 + 77 /3 =(78)
7 2020/2/28 14 79 313 식: D4 + D5 + D6  +D7 /4
87 + 70 +77+ 79 /4 =(78.25)
8 2020/2/29 15 71 384 식 : D4 + D5 + D6  +D7 +D8/5
87 + 70 +77+ 79+71 /5=(76.28)
9 2020/3/1 15 77 461 D4 + D5 + D6  +D7 +D8 + D9/6
87 + 70 + 77 + 79 + 71 + 77 /6=(76.83)
10 2020/3/2 15 85 546 식 : D4 + D5 + D6  +D7 +D8 + D9 + D10 /7
87 + 70 + 77 + 79 + 71 + 77 + 85 / 7=(78)
11 2020/3/3 15 83 629 식 : D5 + D6  +D7 +D8 + D9 + D10 + D11 /7
 70 + 77 + 79 + 71 + 77 + 85 + 83 / 7=(77.42)
12 2020/3/4 15 82 711 식 :D6  +D7 +D8 + D9 + D10 + D11 + D12 /7
 77 + 79 + 71 + 77 + 85 + 83 +82 / 7 =(79.14)

 

 

by 마농 [2021.03.18 12:48:11]

예시자료가 처음 시작이 0 인 것 뿐인데.
중간에 0 이 들어 오는 경우 어떻게 계산되야 하나요?
예를 들어 D9 가 0 일때 12번째 자료가 어떻게 계산되나요?
= (D6 + D7 + D8 + D10 + D11 + D12) / 6
= (D5 + D6 + D7 + D8 + D10 + D11 + D12) / 7
 


by 마르스헤븐 [2021.03.18 13:23:20]

중간에 0이 들어오는 경우에도 /7을 해야할것 같습니다.   D9 가 0일 경우  D6  +D7 +D8 + D9 + D10 + D11 + D12 / 7이 되어야 할것 같습니다. 

 


by 마농 [2021.03.18 13:38:45]

"해야할것 같습니다." ??? 확실하게 정해야 합니다.
규칙을 정한다면? 일관성 있게 해야 합니다.
이럴 땐 이렇고 저럴 땐 저렇다 식의 예외가 많을 수록 어렵습니다.
이 문제는 그럼 최초 시작이 0 인 경우만 제외하는 건가요?
또 애매해 지는 경우가 있는데.
예를 들면. 중간에 D6 이 0 인 경우라면 12번째 자료는 어찌 계산되어야 할까요?
= (D6 + D7 + D8 + D9 + D10 + D11 + D12) / 7
= (D7 + D8 + D9 + D10 + D11 + D12) / 6


by 마르스헤븐 [2021.03.18 13:55:08]

네네 최조 시작이 0인 경우만 제외하면 됩니다.

중간에 D6이 0인 경우에도 12번째 자료도 D6  +D7 +D8 + D9 + D10 + D11 + D12 /7  으로 계산되어야 합니다.

 


by 마농 [2021.03.18 14:07:14]
WITH t AS
(
SELECT '2020-02-22' dt, 0 v
UNION ALL SELECT '2020-02-23',  0
UNION ALL SELECT '2020-02-24',  0
UNION ALL SELECT '2020-02-25', 87
UNION ALL SELECT '2020-02-26', 70
UNION ALL SELECT '2020-02-27',  0
UNION ALL SELECT '2020-02-28', 79
UNION ALL SELECT '2020-02-29', 71
UNION ALL SELECT '2020-03-01', 77
UNION ALL SELECT '2020-03-02', 85
UNION ALL SELECT '2020-03-03', 83
UNION ALL SELECT '2020-03-04', 82
)
SELECT a.dt
     , a.v
     , SUM(b.v)   v_sum
     , AVG(b.v)   v_avg
     , COUNT(b.v) v_cnt
     , GROUP_CONCAT(b.v ORDER BY b.dt SEPARATOR '+') bigo
  FROM t a
  LEFT OUTER JOIN t b
    ON b.dt BETWEEN a.dt - INTERVAL 6 DAY AND a.dt
   AND b.dt >= (SELECT MIN(dt) FROM t WHERE v > 0)
 GROUP BY a.dt, a.v
;

 


by 마르스헤븐 [2021.03.18 14:41:39]

마농님 소중한 시간 내주셔서 정말 감사합니다. 오후도 행복한 하루 되세요. 

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