Autor Zpráva
T-fon
Profil
Ahoj, mám tabulku, kde uživatelé hodnotí tvůrce a to můžou udělat několikrát.

 user_id |  tvurce_id  |  hodnoceni
------------------------------------------  
 1       |     1       |  3
 1       |     1       |  4
 1       |     1       |  3
 1       |     2       |  1
 1       |     2       |  4
 2       |     1       |  5
 2       |     1       |  3

Chtěl bych vytvořit tabulku, kde by se načetlo pořadí tvůrců dle průměru. Průměr by měl být vypočtený z průměrného hodnocení každého uživatele. Čili např. tvůrce s ID 1 nebude mít průměr (3+4+3+5+3)/5, ale ((3+4+3)/3+(5+3)/2)/2.
Zkoušel jsem něco takového:
SELECT AVG(prumer) AS hodnoceni FROM (SELECT tvurce_id, AVG(hodnoceni) AS prumer FROM rating GROUP BY tvurce_id) a
Dostanu jen jeden řádek. Prosím o radu, co je v dotazu špatně. Děkuji.
juriad
Profil
Ve vnitřním dotazu si vypočítáš průměrné hodnocení pro každého tvůrce a uživatele. Ve vnějším si z těchto hodnoceních vypočítáš průměr pro každého tvůrce. A pak to seřadíš sestupně podle vypočítaného průměru.

SELECT tvurce_id, AVG(hodnoceni) AS hodnoceni
FROM (
  SELECT user_id, tvurce_id, AVG(hodnoceni) AS hodnoceni
  FROM rating
  GROUP BY user_id, tvurce_id
) unikatni
GROUP BY tvurce_id
ORDER BY 2 DESC
T-fon
Profil
Díky moc, to je přesně ono.
T-fon
Profil
Mám ještě jeden dotaz: přidání Count(hodnoceni) AS pocet mi spočte už spojené položky. Jak bych mohl spočítat kompletně všechny řádky v tomto dotazu?
juriad
Profil
Musíš venku sečíst kolikrát každý uživatel hlasoval:

SELECT tvurce_id, AVG(hodnoceni) AS hodnoceni, SUM(pocet) AS pocet
FROM (
  SELECT user_id, tvurce_id, AVG(hodnoceni) AS hodnoceni, COUNT(*) AS pocet
  FROM rating
  GROUP BY user_id, tvurce_id
) unikatni
GROUP BY tvurce_id
ORDER BY 2 DESC
T-fon
Profil
Aha, jasně. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: