Использование stddev в Mysql через столбцы - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть таблица MYsql.

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

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

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 голосов
/ 14 сентября 2011

Попробуйте добавить GROUP BY name в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...