2009-05-26 8 views
1

J'ai une table MySQL de données de corrélation que j'ai besoin d'extraire. J'exécute cette requête pour trouver la corrélation entre x et y donné l'identifiant; Cependant, j'ai besoin de lancer x.id = 1 contre y.id = 2, 3, 4, 5 ... Actuellement, je cours juste la commande ci-dessous plusieurs fois pour chaque paire. Existe-t-il un moyen d'accélérer la requête afin que je puisse simplement exécuter la requête une fois comme la deuxième équation?affichant toutes les lignes dans un calcul?

SELECT @correlation := (COUNT(x.value)*SUM(x.value*y.value) - 
    sum(x.value)*sum(y.value))/SQRT((COUNT(x.value)*SUM(x.value*x.value) - 
    sum(x.value)*sum(x.value))*(COUNT(y.value)*SUM(y.value*y.value) - 
    sum(y.value)*sum(y.value))) AS correlation 
FROM tbl_expressions x, tbl_expressions y 
WHERE x.id=1 AND y.id=2 AND x.expressionnumber=y.expressionnumber; 

SELECT @correlation := (COUNT(x.value)*SUM(x.value*y.value) - 
    sum(x.value)*sum(y.value))/SQRT((COUNT(x.value)*SUM(x.value*x.value) - 
    sum(x.value)*sum(x.value))*(COUNT(y.value)*SUM(y.value*y.value) - 
    sum(y.value)*sum(y.value))) AS correlation 
FROM tbl_expressions x, tbl_expressions y 
WHERE x.id=1 AND y.id IN (2, 3, 4, 5, 6, 7) AND x.expressionnumber=y.expressionnumber; 

Je veux que le résultat soit quelque chose comme ceci:
corrélation
.83
.82
.74
.64
...

mais en ce moment la requête ne sort qu'une ligne (la corrélation entre x.id et le dernier y.id)

Répondre

0

Il est difficile de répondre à cette question car votre description ne précise pas clairement ce que vous recherchez.

Mais je suppose que vous pourriez être en mesure d'utiliser GROUP BY pour réaliser ce que vous voulez. Je suis désolé je ne peux pas montrer un exemple parce que je ne peux pas dire ce que vous voulez que le résultat soit.

+0

merci cela a fonctionné quand j'ai ajouté GROUP BY y.id –

0

si vous utilisez MySQL 5.0 et plus, vous voudrez peut-être envisager des procédures stockées pour gérer certaines de ces choses ....

également, avez-vous considéré les sous-requêtes? http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

+1

Ou obtenir les données et faire des calculs dans le code ... – rball

+0

J'ai regardé dans les procédures stockées, en particulier stat-pmcc-samp dans mysqludf mais cela n'a pas fonctionné pour ma table. –

+0

J'ai essayé d'obtenir les données et de faire les calculs dans le code et c'était en fait plus lent que d'effectuer les requêtes. –

Questions connexes