Autor Zpráva
Korči
Profil *
Ahoj všem, mám databázovej dotaz s použitím GROUP BY a rád bych získal součet jeho výsledku. Nenapadlo mě nic jinýho, než
SELECT SUM(dotaz);
a háže to hlášku "Subquery returns more than 1 row". Nechce se mi věřit, že MySQL umí spočítat sumu z vnořenýho dotazu jenom v případě, že se jedná o jeden řádek a jeden sloupec. Nemáte prosím někdo o tomdle znalost? Mně se jí vyhledat nepodařilo.
Děkuju moc.
Joker
Profil
Korči
Takovouhle divočinu jsem ještě nezkoušel, ale možná je problém v tom, že MySQL neví, z čeho vlastně tu sumu počítat?
Kajman_
Profil *
Nemáte v tom poddotazu ještě group by? V tom případě může být součtů víc.
Korči
Profil *
Díky moc pánové.
Ten poddotaz je seskupenej GROUP BY, ale součet by měl bejt jenom jeden, poněvadž tam je jenom jeden sloupec.
Kajman_
Profil *
Tak group by oddělejte a je to.
Korči
Profil *
Neni. Jednak tendle konkrétní dotaz bez GROUP BY neumim a druhak nefunguje ani toto:

CREATE TABLE `t` (`s` TINYINT);
INSERT INTO `t` (`s`) VALUES ('1');
INSERT INTO `t` (`s`) VALUES ('1');

SELECT SUM((SELECT(s) FROM t));
ninja
Profil
A proc nemuzes pouzit:

SELECT COUNT(nejaky_sloupec_nad_kterym_negroupujes) ...zbytek tveho dotazu; ?
Kajman_
Profil *
SELECT SUM((SELECT(s) FROM t));

a co to nepsát tak složite?

select sum(s) from t
Korči
Profil *
Ninja: děkuju moc, ale nerozumim. Potřebuju součet položek a ne COUNT.

Kajman: To je jasný, ale ten muj případ musí bejt s GROUP BY, takže to potřebuju takhle složitě. Proč ten uvedenej příklad nefunguje?
Kajman_
Profil *
ale ten muj případ musí bejt s GROUP BY

Nenapadá mě, proč by v poddotazu, kde počítáte součet, měl group by nějaký význam.

Proč sem nepošlete ten dotaz? Takhle se těžko něco vyřeší.
Kajman_
Profil *
Jinak tu je článek o výkonové problematice tohoto řešení článek (pgsql, ale principy jsou stejné)
http://www.root.cz/clanky/korelovane-vnorene-dotazy-nepouzivat-a-nahra dit/
Korči
Profil *
Nechtěl sem vás zatěžovat. A taky mi neni jasný, proč nefunguje tadle věc. Nenapadá mě jedinej důvod.
Tady je ten dotaz:

SELECT sklad.ks-IFNULL(SUM(paragony.ks), 0) FROM sklad LEFT JOIN paragony USING (id) GROUP BY sklad.id

Zjišťuju tak momentální zásobu zboží skladu podle tabulky "sklad", kde sou všechny nákupy a z tabulky "paragony", kde sou všechny prodeje.

Děkuju!
Korči
Profil *
Děkuju moc, zejtra na to určitě mrknu.
Kajman_
Profil *
Ale vždyť tam není žádný poddotaz... tak to nechápu, proč to hlásí Subquery returns more than 1 row. Jedině, že jste dal jen ten poddotaz, pak stačí oddělat group a dát where

select t.cosi, (SELECT sklad.ks-IFNULL(SUM(paragony.ks), 0) FROM sklad LEFT JOIN paragony USING (id) where sklad.id = t.id_zbozi) pocet form uplnejinatabulka t where podminkacotoomezinaparradku
Korči
Profil *
Vy jste neuskutečnej! Děkuju za všechnu ochotu.
Ten uvedenej dotaz (SELECT sklad.ks-IFNULL(SUM(paragony.ks), 0) FROM sklad LEFT JOIN paragony USING (id) GROUP BY sklad.id) je onen poddotaz z mojí původní prosby o pomoc (proč nefunguje SELECT SUM(poddotaz)). Takže jste to pochopil myslím přesně. Horší je to se mnou:

select t.cosi, (SELECT sklad.ks-IFNULL(SUM(paragony.ks), 0) FROM sklad LEFT JOIN paragony USING (id) where sklad.id = t.id_zbozi) pocet from uplnejinatabulka t where podminkacotoomezinaparradku

Co má prosím "uplnejinatabulka" za obsah? Omlouvám se za svojí omezenost. Ale když už jste si s tím dal tu práci, tak mi přijde škoda to nepochopit.

Děkuji a děkuji!
Kajman_
Profil *
Co má prosím "uplnejinatabulka" za obsah?

Libovolná tabulka obsahující sklad.id (paragony.id).

Těžko se dá hledat chyba, když sem nedáte ten sql dotaz a dáváte jen kousek z neho.
Korči
Profil *
Omlouvám se. Nechtěl jsem zacházet do detailu, alébrž být spíše obecný.
Díky moc. Vaše řešení funguje přesně dle představ. Pozval bych Vás na pivo. Nejste náhodou jihočech?

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