Autor Zpráva
aoiafafoaosa
Profil *
Zdravím,
mám 2 tabuľky - servery a stats_servery. V tabuľke servery sú uložené informácie o serveri (id, názov, url, kategória, atď.) a v tabuľke stats_servery sú uložené štatistiky zobrazení za 7 dní (7 riadkov na jeden server) pre daný server s rovnakým ID ako je ID serveru.

Keď chcem ale vybrať z tabuľky servery zoznam serverov usporiadaný podľa počtu zobrazení za 7 dní s podmienkou, že tento počet zobrazení musí byť väčší ako 1, tak mi vypíše chybu "#1111 invalid use of group by function". Neviete kde by mohla byť chyba?


SQL príkaz:


SELECT
`servery`.`id` AS `server_id`,
SUM(`stats_servery`.`zobrazeni`) AS `spolu_zobrazeni`,
SUM(`stats_servery`.`kliknuti`) AS `spolu_kliknuti`

FROM `servery` LEFT JOIN `stats_servery` ON `stats_servery`.`id` = `servery`.`id`

WHERE SUM(`stats_servery`.`zobrazeni`) >= 1
GROUP BY `servery`.`id`
ORDER BY `spolu_zobrazeni` DESC,`spolu_kliknuti` DESC



Vďaka.
nightfish
Profil
používáš agregační funkci SUM v části WHERE, to samozřejmě není možné, protože SUM se vypočítá až na základě vybraných řádků
přesuň podmínku z WHERE do HAVING

select ... from ... left join .. on ... group by `servery`.`id` having sum(`stats_servery`.`zobrazeni`) >= 1 order by `spolu_zobrazeni` DESC...
aoiafafoaosa
Profil *
vo WHERE mám SUM preto, lebo mi nechcelo fungovať WHERE `spolu_zobrazeni` >= 1

Ako by sa to dalo spraviť, aby mi to fungovalo s `spolu_zobrazeni` vo WHERE? Vďaka.
Alphard
Profil
nightfish ti právě poradil, neumíš česky?
místo where dej having, na otázku proč je odpovězeno výše nebo v manuálu
having spolu_zobrazeni >= 1

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:

0