2016-08-08 45 views
0

Ich brauche AVG für jede Zeile der Tabelle. Können sagen, wirMYSQL bekommen AVG für jede Zeile

id val 
1 5 
2 6 
3 7 

haben brauche ich

id val 
1 0.277 (5/18) 
2 0.333 (6/18) 
3 0.388 (7/18) 

Kann ich leicht bekommen dies in MYSQL zu erhalten, ohne mit der gleichen Tabelle beizutreten?

+1

was Sie versuchen zu bekommen ist nicht * Durchschnitt *. Woher kommt 28? –

+0

Entschuldigung - es ist ein Tippfehler. es sollte 18 sein. Ich bearbeitet Frage –

Antwort

1

Sie können die Val-Spalte zusammenfassen und die Val-Spalte durch diese Summe dividieren.

select id, 1.0*val/(select sum(val) from tablename) val 
from tablename 
+0

ist das der einzige Weg? Ich habe bemerkt, dass ich es tun muss, "ohne mit demselben Tisch zu gehen". Es ist, weil die anfängliche Abfrage für meine Daten zu komplex ist und ich möchte es nicht zweimal ausführen ( –

+0

@VladimirGordienko Es ist kein Join, auch naive Ansatz wäre zwei getrennte Scans zu tun - einer, um die Summe zu berechnen, zu speichern und zu verwenden Abfrage-Engine als const für die Hauptabfrage Die Unterabfrage wird nicht jedes Mal für jede Zeile in der Hauptabfrage ausgeführt Das ist eine perfekte Lösung – nimdil

+0

Wirklich, ich habe einen Test mit Unterabfragen gemacht und sieht so aus, als würde MYSQL nicht dieselbe Abfrage zweimal ausführen. Diese Lösung ist in Ordnung für mich. TY Jungs! –