2015-01-22 2 views
0

mySQL 데이터 세트의 outliers를 성공적으로 필터링하려고합니다. 평균에서 2 표준 편차를 벗어나는 값을 제외하고 날짜별로 세분화 된 열의 평균을 계산하고 싶습니다.mySQL에서 아웃 라이어를 필터링하는 방법은 무엇입니까?

예를 들어 테이블 :

+---------------------+----------+ 
|  date_time  | duration | 
+---------------------|----------+ 
| 2015-01-01 00:01:00 | 1  | 
| 2015-01-01 00:02:00 | 2  | 
| 2015-01-01 00:02:20 | 23 | 
| 2015-01-01 00:03:10 | 3  | 
| 2015-01-02 00:01:00 | 3  | 
| 2015-01-02 00:02:00 | 4  | 
| 2015-01-02 00:02:20 | 52 | 
| 2015-01-02 00:03:10 | 5  | ... 

가 어떻게 잘 평균에서 2 표준 편차의 외부에있는 이상 값 "23"과 "52"를 제외한 기간 컬럼의 평균을받을 수 있나요?

내가 같은 결과를 얻을 싶습니다

+------------+---------+ 
| date  | average | 
+------------+---------| 
| 2015-01-01 | 2 | 
| 2015-02-01 | 4 | 

나는 2 개는 별도의 가입과 함께 쿼리 또는 하위 쿼리를 필요가 있다고 생각,하지만 난 그것을 알아낼 수 없습니다.

답변

0
SELECT AVG(value) 
FROM yourtable yt 
INNER JOIN (SELECT AVG(value) AS avrg, STDDEV(value) AS stdv 
FROM your table) ilv 
ON yt.value BETWEEN avrg-2*stdv AND avrg+2*stdv 

예와 같이 답변을 드릴 수는 없습니다. 예를 들어 이해가되지 않습니다.

+0

죄송합니다 - 예제 번호에 오타가 있습니다. 기본적으로 아웃 라이어를 제외하고 일별로 그룹화 된 기간 컬럼의 평균을 원합니다. 따라서 2015-01-01에서 평균은 (1 + 2 + 3)/3 = 2 (23 제외) 여야합니다. 그리고 2015-02-01에서 평균은 (3 + 4 + 5)/3 = 4 (52 제외) 여야합니다. 희망은 더 이해가됩니다. –

+0

그래서 date_time 열을 날짜로 캐스트하십시오 (date_format보다 약간 빠름). – symcbean

관련 문제