2009-05-26 10 views
1

Ich habe eine MySQL-Tabelle von Korrelationsdaten, die ich extrahieren muss. Ich führe diese Abfrage aus, um die Korrelation zwischen x und y mit der ID zu finden; Allerdings muss ich x.id = 1 gegen y.id ausführen = 2, 3, 4, 5 ... Momentan führe ich den folgenden Befehl mehrmals für jede Paarung aus. Gibt es eine Möglichkeit, die Abfrage zu beschleunigen, so dass ich die Abfrage nur einmal wie die zweite Gleichung ausführen kann?Anzeige aller Zeilen in einer Berechnung?

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; 

möchte ich das Ergebnis, so etwas sein:
Korrelation
.83
.82
.74
.64
...

aber jetzt die Abfrage gibt nur eine Zeile aus (die Korrelation zwischen x.id und der letzten y.id)

Antwort

0

Es ist schwer zu beantworten, weil es aus Ihrer Beschreibung nicht klar ist, was Sie für die Abfrage benötigen.

Aber ich würde vermuten, dass Sie GROUP BY verwenden können, um zu erreichen, was Sie wollen. Es tut mir leid, dass ich kein Beispiel zeigen kann, weil ich nicht sagen kann, was das Ergebnis sein soll.

+0

danke das funktionierte, wenn ich GROUP BY y.id angehängt habe –

0

Wenn Sie MySQL 5.0 und höher verwenden, sollten Sie gespeicherte Prozeduren in Betracht ziehen, um einige dieser Dinge zu behandeln ....

auch, haben Sie Unterabfragen in Betracht gezogen? http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

+1

Oder holen Sie sich die Daten und Berechnungen im Code ... – rball

+0

Ich habe in Stored Procedures, insbesondere stat-pmcc-samp in mysqludf untersucht, aber es hat nicht für meine Tabelle funktioniert. –

+0

Ich habe versucht, die Daten zu erhalten und die Berechnungen im Code durchzuführen, und es war tatsächlich langsamer als die Abfragen durchzuführen. –

Verwandte Themen