2013-12-22 4 views
1

Я пытаюсь вычислить, как вычислить коэффициент корреляции pearson, используя sql. Вот формула я использую: enter image description here и вот таблица, я использую: enter image description hereНедопустимое использование групповой функции; пытаясь найти корреляцию pearson

Это то, что я до сих пор для запроса, но это дает мне это сообщение: Invalid использование групповой функции

select first_id, second_id, movie_id, first_score, second_score, count(*) as n, 
sum((first_score-avg(first_score))*(second_score-avg(second_score)))/ 
(
sqrt(sum(first_score-avg(first_score)))* 
sqrt(sum(second_score-avg(second_score)))) 
as pearson 
from connections 
group by second_id 

Спасибо за помощь

+0

Просто глядя на него, вы не можете иметь сумму или среднюю сумму или сумму. Не могли бы вы разместить SQL на SQLfiddle.com? –

ответ

2

Вот запрос, который делает вычисление в формуле:

select sum((first_score - avg_first_score)*(second_score - avg_second_score))/
     (sqrt(sum(pow((first_score - avg_first_score), 2)))* 
     sqrt(sum(pow((second_score - avg_second_score), 2))) 
     ) as r  
from connections c cross join 
    (select avg(first_score) as avg_first_score, avg(second_score) as avg_second_score 
     from connections 
    ) const; 

Есть многочисленные проблемы, связанные с вашей попыткой. Это предсказывает средние значения для двух оценок. Затем она применяет формулу в значительной степени, как написано.

0

с чисто синтаксической точки зрения, у вас есть проблемы с пунктом group by. Он должен перечислить каждый неагрегированный столбец для правильной работы. Оно должно быть:

group by first_id, second_id, movie_id, first_score, second_score 

 Смежные вопросы

  • Нет связанных вопросов^_^