Hallo Ilja,
Ich taste mich langsam heran.
Meine Tabellen habe ich doch so gelassen, wie ich sie entworfen habe:
game: id, ...
round: id, game_id, ...
placing: id, round_id, player_id
player: id
Außerdem noch die Tabelle point_allocation:
id, nr_players, place, points
Die hat im Moment folgenden Inhalt:
+------------+-------+--------+
| nr_players | place | points |
+------------+-------+--------+
| 5 | 1 | 42 |
| 5 | 2 | 25 |
| 5 | 3 | 12 |
| 5 | 4 | 4 |
| 5 | 5 | 0 |
| 6 | 1 | 50 |
| 6 | 2 | 30 |
| 6 | 3 | 15 |
| 6 | 4 | 4 |
| 6 | 5 | 1 |
| 6 | 6 | 0 |
| 7 | 1 | 58 |
| 7 | 2 | 35 |
| 7 | 3 | 18 |
| 7 | 4 | 5 |
| 7 | 5 | 1 |
| 7 | 6 | 0 |
| 7 | 7 | 0 |
+------------+-------+--------+
Mit der Anweisung
SELECT p.name AS Spieler,
COUNT(DISTINCT g.id) AS Spiele,
COUNT(DISTINCT r1.id) AS Runden,
SUM((SELECT pa.points FROM point_allocation pa
WHERE pa.nr_players = ANY
(SELECT COUNT(DISTINCT pg.id) FROM round r2
LEFT JOIN placing pg ON pg.round_id = r2.id
LEFT JOIN game g ON r2.game_id = g.id
WHERE r2.id = r1.id
GROUP BY r1.id)
AND pa.place = pg.place)) AS Punkte
FROM player p
LEFT JOIN placing pg ON pg.player_id = p.id
LEFT JOIN round r1 ON pg.round_id = r1.id
LEFT JOIN game g ON g.id = r1.game_id
GROUP BY p.name ORDER BY Punkte DESC, Spiele DESC, Runden DESC;
bekomme ich schon mal
+-----------+--------+--------+--------+
| Spieler | Spiele | Runden | Punkte |
+-----------+--------+--------+--------+
| Christian | 2 | 7 | 280 |
| Stefan | 2 | 7 | 148 |
| Alexander | 2 | 7 | 84 |
| Benno | 2 | 7 | 76 |
| David | 2 | 7 | 72 |
| Falko | 2 | 7 | 40 |
| Stephan | 0 | 0 | NULL |
| Gregor | 0 | 0 | NULL |
| Jago | 0 | 0 | NULL |
+-----------+--------+--------+--------+
Vielen Dank für Deine Tipps. Nun habe ich mal probiert, die Spiele, Runden und Punkten Variablen zuzuweisen, und mit diesen weiter zu rechnen
...
@nrSpiele := COUNT(DISTINCT g.id) AS Spiele,
@nrRunden := COUNT(DISTINCT r1.id) AS Runden,
@Punkte := SUM((SELECT pa.points FROM point_allocation pa
...
@Punkte/@nrSpiele AS "Punkte/Spiel"
bekomme dann jedoch nur NULL in der Spalte "Punkte/Spiel". Ist das der richtige Weg?
Viele Grüße,
Stefan