Dnes jsem potřeboval vytáhnout z databáze průměrné hodnocení článků, ovšem s tím, že hodnocení registrovaných uživatelů má trojnásobnou váhu než uživatelé neregistrovaní. Nakonec jsem skončil u následujícího skriptu, který se mi zdá být nejjednodušší a také nejrychlejší na zpracování. Pomocí IF ověřím, jestli je uživatel registrovaný, pokud ano započítám jeho hodnocení za trojnásobek, všechna tato hodnocení sečtu a následně vydělím součtem vah. Je trochu s podivem, že funkce AVG() pro průměr zde vůbec není využita. Pokud máte lepší řešení, podělte se o něj v komentářích.
SELECT ROUND(
sum(
IF( h.userId IS NOT NULL , 3 * rating, rating )
) / sum(
IF( h.userId IS NOT NULL , 3, 1 )
)
, 2 )
FROM hodnoceni h WHERE ...
Žádné příbuzné články.