Was übersehen:
SELECT
u.surname,
u.name,
s.skinid,
s.skin,
s.screenshot,
s.skdate,
avg(sr.rating) AS MW_rating,
--- Bitte nicht rating (einen Feldnamen) als alias benutzen.count(sr.rating) AS votes
from userdata u, skin s, skinrating sr
WHERE
u.uid=s.uid AND
s.activ='t' AND
sr.skinid = s.skinid AND
u.deleted='f' AND
s.deleted='f' ANDrating>=7 AND
rating<=10 AND
--- Hier schließt Du alle ratings <7 und >10 von der Gruppierung und damit auch von der Mittelwertberechnung aus. Diese Bedingungen bitte entfernen.skdate>='2002-01-01' AND
skdate<='2003-01-20'
GROUP by u.surname, u.name, s.skinid, s.skin, s.screenshot, s.skdateHAVING (((Avg(sr.rating))>=7 And (Avg(sr.rating))<=10))
Du willst, dass die _Mittelwerte_ zwischen 7 un 10 liegen!
UNION SELECT u.surname, u.name, s.skinid, s.skin, s.screenshot, s.skdate, 0,0 FROM userdata u, skin s, skinrating sr WHERE u.uid=s.uid AND s.activ='t' AND u.deleted = 'f' AND s.deleted = 'f' AND skdate>='2002-01-01' AND skdate<='2003-01-20' AND not exists (SELECT * FROM skinrating sr WHERE sr.skinid = s.skinid)
---
Keine Ahnung, ob diese UNIONs noch richtig sind.
---
ORDER BY rating desc LIMIT 5 OFFSET 0
---Die Spalte rating gibt es gar nicht. Wonach soll er sortieren? Nach dem Mittelwert, nehme ich an.
---
ORDER BY Avg(sr.rating) desc LIMIT 5 OFFSET 0
---
Gruß
Axel