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)
danke das funktionierte, wenn ich GROUP BY y.id angehängt habe –