Versionen dieses Beitrags

MySQL: SUM der jeweils besten 3

Point of2 Matthias Apsel
  • MySQL: SUM der jeweils besten 3
  • Hi again,
  • vielen Dank für Deine Antwort. Dann lag ich mit meinem Problem ja gar nicht so falsch, dass das ziemlich "tricky" ist.
  • Idee:
  • Das ist das "Endergebnis" (Summe):
  • ~~~sql
  • SELECT SUM(einzelergebnis) AS gesamtergebnis
  • FROM table GROUP BY sportler_id
  • ORDER BY gesamtergebnis DESC
  • ~~~
  • Nun ist ja der Inhalt der "table" eigentlich eine Teilmenge, sprich ein Subselect.
  • "Hole alle Daten aus der table a, wobei nur diejenigen ergebnis-Datensätze genommen werden sollen, welche die gleiche Sportler_id haben, sortiert nach einzelergebnise und nur die ersten 3:
  • SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • ~~~sql
  • SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)`
  • ~~~
  • Und das wiederum eingepackt in den ersten SUM-Query:
  • ~~~sql
  • SELECT SUM(c.einzelergebnis) AS gesamtergebnis
  • FROM (SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • )c GROUP BY c.sportler_id
  • ORDER BY gesamtergebnis DESC
  • ~~~
  • Oder wäre sogar ein JOIN richtiger, mit dem ich jeweils die 3 ersten Datensätze an den "ersten Datensatz" anhänge und dann via GROUP die richtige Summe ziehen kann?
  • Ist sowas denkbar?
  • Beste Dank
  • Fabienne

MySQL: SUM der jeweils besten 3

Point of2 Matthias Apsel
  • MySQL: SUM der jeweils besten 3
  • Hi again,
  • vielen Dank für Deine Antwort. Dann lag ich mit meinem Problem ja gar nicht so falsch, dass das ziemlich "tricky" ist.
  • Idee:
  • Das ist das "Endergebnis" (Summe):
  • ~~~sql
  • SELECT SUM(einzelergebnis) AS gesamtergebnis
  • FROM table GROUP BY sportler_id
  • ORDER BY gesamtergebnis DESC
  • ~~~
  • Nun ist ja der Inhalt der "table" eigentlich eine Teilmenge, sprich ein Subselect.
  • "Hole alle Daten aus der table a, wobei nur diejenigen ergebnis-Datensätze genommen werden sollen, welche die gleiche Sportler_id haben, sortiert nach einzelergebnise und nur die ersten 3:
  • SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • Und das wiederum eingepackt in den ersten SUM-Query:
  • ~~~sql
  • SELECT SUM(c.einzelergebnis) AS gesamtergebnis
  • FROM (SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • )c GROUP BY c.sportler_id
  • ORDER BY gesamtergebnis DESC
  • ~~~
  • Oder wäre sogar ein JOIN richtiger, mit dem ich jeweils die 3 ersten Datensätze an den "ersten Datensatz" anhänge und dann via GROUP die richtige Summe ziehen kann?
  • Ist sowas denkbar?
  • Beste Dank
  • Fabienne

MySQL: SUM der jeweils besten 3

Fabienne
  • MySQL: SUM der jeweils besten 3
  • Hi again,
  • vielen Dank für Deine Antwort. Dann lag ich mit meinem Problem ja gar nicht so falsch, dass das ziemlich "tricky" ist.
  • Idee:
  • Das ist das "Endergebnis" (Summe):
  • SELECT SUM(einzelergebnis) AS gesamtergebnis
  • FROM table GROUP BY sportler_id
  • ORDER BY gesamtergebnis DESC
  • Nun ist ja der Inhalt der "table" eigentlich eine Teilmenge, sprich ein Subselect.
  • "Hole alle Daten aus der table a, wobei nur diejenigen ergebnis-Datensätze genommen werden sollen, welche die gleiche Sportler_id haben, sortiert nach einzelergebnise und nur die ersten 3:
  • SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • Und das wiederum eingepackt in den ersten SUM-Query:
  • SELECT SUM(c.einzelergebnis) AS gesamtergebnis
  • FROM (SELECT * FROM table a WHERE ergebnis_id=(SELECT b.einzelergebnis_id FROM table b WHERE b.sportler_id=a.sportler_id ORDER BY b.einzeleregbnise DESC LIMIT 0,3)
  • )c GROUP BY c.sportler_id
  • ORDER BY gesamtergebnis DESC
  • Oder wäre sogar ein JOIN richtiger, mit dem ich jeweils die 3 ersten Datensätze an den "ersten Datensatz" anhänge und dann via GROUP die richtige Summe ziehen kann?
  • Ist sowas denkbar?
  • Beste Dank
  • Fabienne