Hallo Martin!
SELECT AVG(voting.vote) AS 'Durchschnitt',
foto.Titel,
user.Name
FROM foto, user, voting
WHERE foto.userid = user.ID
AND voting.fotoid = foto.ID
GROUP BY voting.fotoid
ORDER BY durchschnitt DESC
Anmerkung: Ich bin mir nicht ganz sicher, ob die letzte Zeile mit "ORDER BY ..." im Zusammenhang mit "GROUP BY ..." funktioniert.
Wenn es nicht funktioniert, dann die Abfrage ohne die letzte Zeile ausführen und in eine temporäre Tabelle speichern und mit einer zweiten Abfrage diese temporäre Tabelle mit "ORDER BY ..." sortiert ausgeben.
Bei der Ausgabe bzw. der HTML-Generierung liest du Datensatz für Datensatz aus und Nummerierst die Enträge. Somit hast du auch die Rangzahlen.