Vážený průměr v MySQL

Publikováno 3. 3. 2009

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 ...

Tento článek byl přidán 3.3.2009 v 22:45 a patří do kategorie Webdesign. Reakce na článek můžete jednoduše sledovat pomocí RSS 2.0 kanálu. Můžete přidat komentář pokud chcete.

Přidat komentář

 


webdesign Jan Zikmund