2012-06-25 11 views
7

In Ordnung, also ich habe eine Benutzertabelle und möchte den maximalen Wert für den Benutzer mit der höchsten Anzahl von Punkten geteilt durch eine Punktzahl erhalten. Unten finden Sie eine grobe Idee ist das, was ich suche:Wie summiere und teile ich in MySql

SELECT MAX(SUM(points)/SUM(score)) FROM users 

ich in Aufsummierung beiden Spalten und Teilen interessiert mich nicht, sondern mich interessiert die Punkte teilen und für jeden Benutzer punkten und Holen Sie den höchsten Wert aus dem Los.

+4

Funktioniert SELECT MAX (Punkte/Ergebnis) FROM Benutzer nicht? – thesunneversets

Antwort

3

Vielleicht könnten Sie dies tun mit einer Unterabfrage:

Select max(points_over_Score) 
from 
    (Select points/score AS points_over_score 
    from users); 

Und wie thesunneversets in einem Kommentar erwähnt, die wahrscheinlich zu

verkürzt werden kann
SELECT MAX(points/score) FROM users; 

Sie schriftliche Beschreibung dessen, was Sie‘ re versucht zu tun macht es nicht klar, warum dein Beispiel SUM darin hat, also habe ich es nicht benutzt.

Auch Codefragen wie diese sind besser geeignet für stackoverflow.com. Sie können Ihre eigene Frage markieren, um einen Moderator zu bitten, sie zu migrieren.

+0

Eigentlich hat das perfekt funktioniert. Ich dachte, es würde sowohl die Punkte und Punkte (wie in allen Punkten und Punkten) hinzufügen und dann von dort aus gehen, aber es scheint so zu sein, wie ich es wollte. Eine letzte Frage: Wie kann ich den Wert in Dezimalform erhalten (wenn die Zahl eine Dezimalzahl ergibt?) –

+0

@Nick: Was hat perfekt funktioniert? – FrustratedWithFormsDesigner

+0

Die von Ihnen gepostete Abfrage funktionierte genau so, wie ich es wünschte. Ich sagte, dass ich dachte, dass eine solche Abfrage dazu führen würde, dass beide Spalten hinzugefügt würden und das Ergebnis der Punktierung durch Punkte geteilt würde, anstatt die höchsten Punkte/Punkte zurückzugeben. Jetzt muss ich es nur haben, wenn das Ergebnis eine Dezimalzahl ist, wird es als Dezimalzahl zurückgegeben und nicht gerundet. –

0

Die Antwort von FrustratedWithFormsDesigner funktioniert nicht, wenn Sie alle Punkte, dann alle Punkte zusammenfassen und dann die beiden Werte teilen müssen. Diese Antwort teilt jeden Punkt mit der Punktzahl und gibt dann die höchste Antwort zurück.

sollte diese Arbeit:

SELECT MAX(sum_points/sum_score) from 
(SELECT SUM(points) as sum_points, SUM(score) as sum_score FROM users) 

BTW, dies gibt eine "ungewöhnlich" Prozentsatz. Wahrscheinlich möchten Sie Punkt für Punkt teilen. Wenn Sie beispielsweise 70 von 100 erhalten, sind es 70%, oder Sie erhalten (70)/Punkte (100).