Zadejte hledaný výraz...

Agregační funkce

perry
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 10:46:20
Pomocí agregačních funkcí MIN a MAX vyberu z tabulky max. a minimální cenu zboží. K této ceně ovšem potřebuju "přilepit" i název zboží, což se mi nedaří.
SELECT MAX(cena) AS maxCena, MIN(cena) AS minCena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 100
Tohle mi logicky vrátí 560 | 120 | sako (vybere min, max spravne a pak k tomu prihodi prvni nazev zbozi, ktery je v tabulce)
Jak to mám svázat dohromady, abych dostal výsledek ve tvaru 450|Tričko X|120|Kalhoty...
10. 2. 2009 10:46:20
https://webtrh.cz/diskuse/agregacni-funkce#reply231552
lunacek
verified
rating uzivatele
10. 2. 2009 11:47:37
Napsal perry;210885
Pomocí agregačních funkcí MIN a MAX vyberu z tabulky max. a minimální cenu zboží. K této ceně ovšem potřebuju "přilepit" i název zboží, což se mi nedaří.
SELECT MAX(cena) AS maxCena, MIN(cena) AS minCena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 100
Tohle mi logicky vrátí 560 | 120 | sako (vybere min, max spravne a pak k tomu prihodi prvni nazev zbozi, ktery je v tabulce)
Jak to mám svázat dohromady, abych dostal výsledek ve tvaru 450|Tričko X|120|Kalhoty...
Těch zboží, které mají mina max cenu může být i více, takže bych to udělal:
select zboziNazev
from obchod
where cena = (SELECT MAX(cena) FROM obchod WHERE ... )
pro zbozi s maximalni cenou a
select zboziNazev
from obchod
where cena = (SELECT MIN(cena) FROM obchod WHERE ... )
pro zbozi s minimalni cenou
Roman Luňáček
10. 2. 2009 11:47:37
https://webtrh.cz/diskuse/agregacni-funkce#reply231551
sasotka
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 12:31:52
Pokud to chceš do jedné tabulky, tak bych udělal něco jako:
SELECT nazev, cena FROM tabulka WHERE cena = (SELECT min(cena) FROM tabulka WHERE cena > 120) OR cena = (SELECT max(cena) FROM tabulka WHERE cena < 500)
nebo UNION dotazů v předchozím vlákně.
Nebo taky třeba:
SELECT nazev, cena FROM table WHERE cena IN (SELECT MAX(cena) FROM table WHERE cena < 500 UNION SELECT MIN(cena) FROM table WHERE cena > 120)
10. 2. 2009 12:31:52
https://webtrh.cz/diskuse/agregacni-funkce#reply231550
perry
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 12:55:16
A bez těch více-násobných selectů ? Přijdou mi totiž dost pomalé a nevyplatí se mi to... rychlejší je, když ten dotaz pustím 2x a udělám to takhle...
SELECT cena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 200 ORDER BY CENA DESC LIMIT 0,1;
SELECT cena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 200 ORDER BY CENA ASC LIMIT 0,1;
10. 2. 2009 12:55:16
https://webtrh.cz/diskuse/agregacni-funkce#reply231549
sasotka
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 13:10:38
Napsal perry;210978
A bez těch více-násobných selectů ? Přijdou mi totiž dost pomalé a nevyplatí se mi to... rychlejší je, když ten dotaz pustím 2x a udělám to takhle...
SELECT cena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 200 ORDER BY CENA DESC LIMIT 0,1;
SELECT cena, zboziNazev FROM obchod WHERE cena < 500 AND cena > 200 ORDER BY CENA ASC LIMIT 0,1;
Pomalé je dost relativní, pokud máš dobře udělané indexy, zdržení by nemělo být tak velké. Záleží na tom, co přesně chceš, aby ti dotaz vracel.
Pokud chceš tohle dělat z PHPčka, tak věz, že režije spojená s provedením mysql_query není tak úplně malá a často bývá lepší jeden složitější dotaz, než dva jednoduché.
10. 2. 2009 13:10:38
https://webtrh.cz/diskuse/agregacni-funkce#reply231548
perry
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 13:28:33
sasotka:
Porovnával jsem časy, co vypíše PHPMyAdmin. bylo to cca 2x-3x pomalejší s vnitřními selecty.. ale možná je to fakt těmi indexy... mám ho vytvořený na sloupci název
10. 2. 2009 13:28:33
https://webtrh.cz/diskuse/agregacni-funkce#reply231547
sasotka
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 13:31:08
Napsal perry;211002
sasotka:
Porovnával jsem časy, co vypíše PHPMyAdmin. bylo to cca 2x-3x pomalejší s vnitřními selecty.. ale možná je to fakt těmi indexy... mám ho vytvořený na sloupci název
Zkus ještě index na ceně, protože právě podle té hledáš. Nemám reálný data, abych mohl něco zkoušet, ale hlavně nevím úplně přesně, co od toho dotazu požaduješ.
Chceš jen dva řádky a v nich libovolný nejlevnější a nejdražší z intervalu? Chceš všechny nejlevnější a nejdražší?
10. 2. 2009 13:31:08
https://webtrh.cz/diskuse/agregacni-funkce#reply231546
perry
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 13:42:22
Napsal sasotka;211006
Zkus ještě index na ceně, protože právě podle té hledáš. Nemám reálný data, abych mohl něco zkoušet, ale hlavně nevím úplně přesně, co od toho dotazu požaduješ.
Chceš jen dva řádky a v nich libovolný nejlevnější a nejdražší z intervalu? Chceš všechny nejlevnější a nejdražší?
Dva řádky a v nich nejdražší a nejlevnější předmět (co to je + cenu)
10. 2. 2009 13:42:22
https://webtrh.cz/diskuse/agregacni-funkce#reply231545
sasotka
verified
rating uzivatele
(2 hodnocení)
10. 2. 2009 13:58:57
Napsal perry;211012
Dva řádky a v nich nejdražší a nejlevnější předmět (co to je + cenu)
Tak to bych klidně udělal UNION těch dvou dotazů, co tam máš, jen bych místo LIMIT použil MIN a MAX. Podle potřeby UNION ALL, abys tam měl i případnou duplicitu.
10. 2. 2009 13:58:57
https://webtrh.cz/diskuse/agregacni-funkce#reply231544
Pro odpověď se přihlašte.
Přihlásit