2011-09-14 2 views
0

나는 테이블 MYSQL 테이블이 있습니다.열을 가로 질러 MySQL에서 stddev 사용

name, t1 , t2 , t3. 

많은 이름과 점수가 있습니다.

쇼 T1, T2, T3

시도 선택 이름, STDDEV (T1, T2, T3)의 표준 편차를 계산합니다, 그것은 일을 일부러.

이 작동 :

SELECT 
    NAME, STDDEV_SAMP(t) STD 
FROM 
(SELECT NAME, t1 AS t FROM test._copy 
    UNION ALL 
    SELECT NAME, t2 AS t FROM test._copy 
    UNION ALL 
    SELECT NAME, t3 AS t FROM test._copy 
) t 
GROUP BY NAME 

답변

3

STDEV()는 집계 함수입니다. 여러 행에서 값을 가져 와서 단일 결과를 산출합니다.

SELECT 
    name, 
    STDEV(t1) standard_deviation_of_t1, 
    STDEV(t2) standard_deviation_of_t2, 
    STDEV(t3) standard_deviation_of_t3 
FROM 
    yourTable 
GROUP BY 
    name 

-- This will give meaningful results if there are several records for the 
-- same name. 

불행히도, 여러 필드에서 값을 가져 오지 않습니다. 그냥 여러 행은

SELECT 
    name, 
    STDEV(t) standard_deviation_of_all_t_values, 
FROM 
(
    SELECT name, t1 AS t FROM yourTable 
    UNION ALL 
    SELECT name, t2 AS t FROM yourTable 
    UNION ALL 
    SELECT name, t3 as t FROM yourTable 
) 
    AS data 
GROUP BY 
    name 

편집

또 다른 옵션 ... 단일 컬럼의 모든 값을 가지고 데이터를 다시 작동 할 필요가 수행하는 대신 UNION ALL이 될 수 있습니다. ..

SELECT 
    name, 
    STDEV(CASE map.field_id WHEN 1 THEN t1 WHEN 2 THEN t2 ELSE t3 END) 
FROM 
    your_table 
CROSS JOIN 
    (SELECT 1 as field_id UNION ALL SELECT 2 UNION ALL SELECT 3) AS map 
GROUP BY 
    name 
+0

+1 MySQL에서 작동하지 않을 수 있습니다. 내가 볼 수있는 한 파생 테이블의 외부 열에 대한 참조를 허용하지 않는 것 같습니다. –

+0

@ dem 당신은 그것을 간단하게 할 수 있습니까? 조금도? 작동하지만 편집을 위해 – Merlin

+0

@Merlin - 대안을 게시했습니다. 그러나 '편집하지만 효과가 있습니까?'라는 것은 무엇을 의미합니까? – MatBailie

0

시도가 마지막에 GROUP BY name를 추가.

관련 문제