Hallo Christoph,
Folgende Lösung funktioniert, wie gewünscht. Allerdings sieht
sie ein bisschen „komisch“ aus - ich denke, es gibt eine
elegantere Lösung als diese:
SELECT COUNT(id) AS cnt, user
FROM xmas_quizzes_solved
WHERE solved = 1
GROUP BY user
HAVING cnt = (
SELECT COUNT(id)
FROM xmas_quizzes_solved
WHERE solved = 1
GROUP BY user
ORDER BY COUNT(id) DESC
LIMIT 1
)
Falls dein Datenbanksystem „common table expressions“ unterstützt, könntest du so etwas von der Redundanz eliminieren (falls nicht, hast du fast keine Chance, außer mit CREATE VIEW eine Sicht anzulegen):
WITH ranking AS (
SELECT COUNT(id) AS cnt, user
FROM xmas\_quizzes\_solved
WHERE solved = 1
GROUP BY user
)
SELECT cnt, user
FROM ranking
WHERE cnt = (
SELECT cnt
FROM ranking
ORDER BY cnt DESC
LIMIT 1
)
oder etwas schöner mit MAX statt Sortierung + LIMIT:
WITH ranking AS (
SELECT COUNT(id) AS cnt, user
FROM xmas\_quizzes\_solved
WHERE solved = 1
GROUP BY user
)
SELECT cnt, user
FROM ranking
WHERE cnt = (
SELECT MAX(cnt)
FROM ranking
)
Andreas