Autor | Zpráva | ||
---|---|---|---|
Korči Profil * |
#1 · Zasláno: 24. 4. 2008, 15:53:02
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 |
#2 · Zasláno: 24. 4. 2008, 15:56:21
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 * |
#3 · Zasláno: 24. 4. 2008, 16:09:06
Nemáte v tom poddotazu ještě group by? V tom případě může být součtů víc.
|
||
Korči Profil * |
#4 · Zasláno: 24. 4. 2008, 16:16:39
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 * |
#5 · Zasláno: 24. 4. 2008, 16:26:44
Tak group by oddělejte a je to.
|
||
Korči Profil * |
#6 · Zasláno: 24. 4. 2008, 16:35:17
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 |
#7 · Zasláno: 24. 4. 2008, 16:39:14
A proc nemuzes pouzit:
SELECT COUNT(nejaky_sloupec_nad_kterym_negroupujes) ...zbytek tveho dotazu; ? |
||
Kajman_ Profil * |
#8 · Zasláno: 24. 4. 2008, 16:42:06
SELECT SUM((SELECT(s) FROM t));
a co to nepsát tak složite? select sum(s) from t |
||
Korči Profil * |
#9 · Zasláno: 24. 4. 2008, 16:45:51
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 * |
#10 · Zasláno: 24. 4. 2008, 16:59:57
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 * |
#11 · Zasláno: 24. 4. 2008, 17:04:10
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 * |
#12 · Zasláno: 24. 4. 2008, 17:07:32
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 * |
#13 · Zasláno: 24. 4. 2008, 17:08:04
Děkuju moc, zejtra na to určitě mrknu.
|
||
Kajman_ Profil * |
#14 · Zasláno: 24. 4. 2008, 22:26:36
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 * |
#15 · Zasláno: 25. 4. 2008, 09:23:48
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 * |
#16 · Zasláno: 25. 4. 2008, 10:36:50
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 * |
#17 · Zasláno: 25. 4. 2008, 11:58:28
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? |
||
Časová prodleva: 16 let
|
0