Autor Zpráva
okolojdouci
Profil *
Mám tabulku zboží a tabulku pohybů, kde každý pohyb znamená příjem nebo výdej nějakého druhu zboží.
Chtěl bych spočítat všechny druhy zboží, které mají bilanci stavu větší než nula. Co dělám špatně?
Dostávám hlášku "Invalid use of group function".

SELECT COUNT( zbozi.ID ) AS pocet
FROM zbozi
LEFT JOIN pohyby ON pohyby.IDzbozi = zbozi.ID AND SUM( pohyby.pocet )>0
WHERE zbozi.IDkategorie =644
Kajman_
Profil *
Chybí tam group by na zbozi.id a podmínka na sum má být v having.
ninja
Profil
okolojdouci: Jestli dobře chápu, chcete jen jednu řádku výsledku, s celkovým počtem zboží v kategorii, které odpovídá té agregované podmínce? To budete muset udělat jinak, například subselektem. Je to v příkladech.
okolojdouci
Profil *
Kajman:

HAVING jsem nikdy nepoužil, tak to plácám metodou pokus - omyl a nic z toho neleze. Resp. leze z toho vtipná hláška "FUNCTION SUM does not exist."

SELECT COUNT(zbozi.ID) as pocet2, SUM ( pohyby.pocet ) FROM zbozi
LEFT JOIN pohyby ON pohyby.IDzbozi = zbozi.ID
WHERE zbozi.IDkategorie = 645 
GROUP BY zbozi.ID
HAVING SUM ( pohyby.pocet )>0


ninja:
Přesně to chci. Ale jestli subselect znamená něco jako .. WHERE ID IN (SELECT ... , tak to se mi moc nelíbí.
__construct
Profil
okolojdouci:
leze z toho vtipná hláška "FUNCTION SUM does not exist."
Tú vtipnú hlášku spôsobuje medzera medzi slovom SUM a prvou zátvrokou.

Ale jestli subselect znamená něco jako .. WHERE ID IN (SELECT ... , tak to se mi moc nelíbí.
Čo sa Ti na tom nepáči - je to bežná prax.
okolojdouci
Profil *
__construct:
medzera medzi slovom SUM a prvou zátvrokou.

No vida!! Díky! Tu chybu vídám tak zřídka, že na ni vždycky zapomenu.

Čo sa Ti na tom nepáči - je to bežná prax.
Nevím, mám s tím nějaký vnútorný problém :)
IN používám tam kde jde o pár položek, třeba zatržené checkboxy někde v administraci. Ale použít to někde, kde těch položek můžou být stovky nebo tisíce, mi je nějak proti srsti.
Kajman_
Profil *
To in přece vůbec nepotřebujete, stačí obyčejné

select count(*) from (select s group by) as tmp
okolojdouci
Profil *
Kajman:

Ale jo, tak to šlo taky, pro mě prostě ani jedno z těch řešení nebylo úplně bez přemýšlení a když jsem ninjovi psal, už jsem měl v hlavě to having.
Díky všem.

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: