내 데이터는 다음과 같습니다.
id | value | group
------------------
1 | 4 | abc
2 | 8 | def
3 | 100 | abc
4 | 8 | ghi
5 | 7 | abc
6 | 10 | ghi
특이 치 (예 : 그룹 = abc의 경우 id = 3)가 제외 된 그룹당 평균을 알아 내야합니다. 그런 다음 평균 옆에 ouliers를 표시합니다. 위의 데이터에 대해 다음과 같은 결과를 기대합니다.
group = 'abc'
average = '5.5'
outlier = '100'
한 가지 방법은 각 그룹 (평균 및 표준 편차)에 대한 통계를 포함하는 하위 쿼리를 만든 다음이를 다시 원래 테이블에 조인하여 어떤 레코드가 어떤 그룹에 대해 이상 값인지 확인합니다.
SELECT t1.id,
t1.group AS `group`,
t2.valAvg AS average,
t1.value AS outlier
FROM yourTable t1
INNER JOIN
(
SELECT `group`, AVG(value) AS valAvg, STDDEV(value) AS valStd
FROM yourTable
GROUP BY `group`
) t2
ON t1.group = t2.group
WHERE ABS(t1.value - t2.valAvg) > t2.valStd -- any record whose value is MORE
-- than one standard deviation from
-- the mean is an outlier
최신 정보:
어떤 이유로 value
열이 varchar
숫자 유형이 아닌 실제 열인 것으로 보입니다 . 이것은 당신이 그것에 대해 어떤 수학도 할 수 없다는 것을 의미합니다. 따라서 먼저 다음을 통해 해당 열을 정수로 변환하십시오.
ALTER TABLE yourTable MODIFY value INTEGER;
평균 보다 큰 이상 값 만 원하는 경우 다음 WHERE
절 을 사용하십시오 .
WHERE t1.value - t2.valAvg > t2.valStd
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다