Autor | Zpráva | ||
---|---|---|---|
okolojdouci Profil * |
#1 · Zasláno: 12. 4. 2011, 00:28:24
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 * |
#2 · Zasláno: 12. 4. 2011, 08:43:08
Chybí tam group by na zbozi.id a podmínka na sum má být v having.
|
||
ninja Profil |
#3 · Zasláno: 12. 4. 2011, 09:22:28
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 * |
#4 · Zasláno: 12. 4. 2011, 11:59:49
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 |
#5 · Zasláno: 12. 4. 2011, 12:15:53 · Upravil/a: __construct
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 * |
#6 · Zasláno: 12. 4. 2011, 12:29:47
__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 * |
#7 · Zasláno: 12. 4. 2011, 12:39:30
To in přece vůbec nepotřebujete, stačí obyčejné
select count(*) from (select s group by) as tmp |
||
okolojdouci Profil * |
#8 · Zasláno: 12. 4. 2011, 13:32:47
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. |
||
Časová prodleva: 13 let
|
0