Sloučení tří tabulek + výběr agregační funkcí – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Sloučení tří tabulek + výběr agregační funkcí – MySQL – Fórum – Programujte.comSloučení tří tabulek + výběr agregační funkcí – MySQL – Fórum – Programujte.com

 

Neumiminic
~ Anonymní uživatel
2 příspěvky
16. 1. 2017   #1
-
0
-

Zdravím, mám tři tabulky první dejme tomu žák s id, jméno, příjmení. Druhou id_žáka, body_x, třetí id_žáka, body_y. Potřeboval bych jedním výběrem dostat jméno, příjmení, sum(body_x), sum(body_y). Když to udělám tak že tabulky normálně spojím první LEFT JOIN druhá LEFT JOIN třetí tak mi to v podstatě udělá něco jako CROSS JOIN a výsledek je nesmyslný součet. Můžete mi prosím poradit jak data získat v rámci jednoho dotazu? 

Nahlásit jako SPAM
IP: 178.255.168.–
17. 1. 2017   #2
-
0
-

Zkusil bych  (první JOIN druhá as tbl1) UNION (první JOIN třetí as tbl2). Nebo bych zkusil poddotazem získat id žáků z první a udělat UNION výsledků z druhé a třetí.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
4016 příspěvků
17. 1. 2017   #3
-
0
-

 Jen bacha, unionovat lze jen tabulky se stejnym poctem sloupcu. Mohlo by to vypadat nejak takto. To grupovani by slo mozna udelat az na zaver.

SELECT id_žáka, x, y
FROM
(
(SELECT id_žáka, sum(body_x) AS x, NULL             AS y FROM ... GROUP BY id_žáka)
UNION
(SELECT id_žáka, NULL AS x            , sum(body_y) AS y FROM ... GROUP BY id_žáka)
GROUP BY id_žáka
)
LEFT JOIN ... jmeno zaka a pod
Nahlásit jako SPAM
IP: 2001:718:2601:26c:cdca:a6...–
peter
~ Anonymní uživatel
4016 příspěvků
17. 1. 2017   #4
-
0
-

Jo, predposledni radky meli byt jinak. A mohlo by to jit i jednim grupem. A az mas cely vysledek, id, body, teprve pak na to nabalis jmena zaku. Dokud muzes, tak pracujes zkratka s cisly.

SELECT id_žáka, x, y
FROM
(
(SELECT id_žáka, sum(body_x) AS x, NULL             AS y FROM ...)
UNION
(SELECT id_žáka, NULL AS x            , sum(body_y) AS y FROM ...)
GROUP BY id_žáka
)
LEFT JOIN ... jmeno zaka a pod
Nahlásit jako SPAM
IP: 2001:718:2601:26c:cdca:a6...–
peter
~ Anonymní uživatel
4016 příspěvků
17. 1. 2017   #5
-
0
-

Ale, uz zase to mam spatne :) Jo, a union myslim vyzaduje pro tabulky aliasy, viz a, b, c
 To grupovani lze napsat totiz az na konci. Ale mozna bych to nechal u tech selectu --1, --2. Nemam takove znalosti, abych mohl posoudit, co bude rychlejsi. Tipnul bych si nejdriv zgrupovat vysledky a pak zgrupovat ty 2 cisla.

SELECT c.id_žáka, sum(c.x), sum(c.y)
FROM
(
(SELECT id_žáka, sum(body_x) AS x, NULL             AS y FROM ... GROUP BY id_žáka) a -- 1
UNION
(SELECT id_žáka, NULL AS x            , sum(body_y) AS y FROM ... GROUP BY id_žáka) b -- 2
) c
LEFT JOIN ... jmeno zaka a podGROUP BY id_žáka
Nahlásit jako SPAM
IP: 2001:718:2601:26c:cdca:a6...–
KIIV
~ Moderátor
+43
God of flame
17. 1. 2017   #6
-
0
-

Jen pro zamysleni - proc mas dve tabulky s body? Proc nemit jednu tabulku body:   id_zaka, typ, body  a udelat pak  typ, sum(body) nad group by typ ci spise group by id_zaka, typ?

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Neumiminic
~ Anonymní uživatel
2 příspěvky
17. 1. 2017   #7
-
0
-

#5 peter

díky moc za pomoc, pomohlo! :-)


#6 KIIV
Ano je to blbost a v tu chvíli mě to nenapadlo jen jsem chtěl co nejjednodušeji podat problém, který mi vznikl na jiném případu.

Každopádně všem děkuji za pomoc

Nahlásit jako SPAM
IP: 178.255.168.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý