Autor Zpráva
JardaB
Profil
Zdravím, prosím o pomoc s dotazem přes tři tabulky. Původně jsem měl dotaz jen přes dvě, což bylo ok. Potřebuji přidat kvůli rozšíření třetí tabulku, která mi sečte všechny bonusy klienta na daném revíru. V tomto případě bonusy 'obsadka'

SELECT a.id, a.rozloha, a.id_klient, a.nazev, (SUM( b.vaha ) /1000 / a.rozloha) status_kg,  COUNT( b.id ) ks, SUM( c.obsadka ) obs
FROM vr3_reviry_klient a
JOIN vr3_fish_klient b ON b.id_revir = a.id
LEFT JOIN vr3_bonusy_klient c ON c.id_revir = a.id
GROUP BY a.id, a.rozloha, a.id_klient, a.nazev
ORDER BY status_kg DESC 
LIMIT 1

Počet bonusů v revíru může být více. Dostávám ale u 'obs' součin s 'ks', což je logické. Postačí nějak upravit jen GROUP BY?, nebo bude tento dotaz mnohem složitější?
Kajman
Profil
Pokud sčítáte vše, joinujte už seskupená data.

JOIN (SELECT c2.id_revir, SUM(c2.obsadka) sum_obsadka FROM vr3_bonusy_klient c2 GROUP BY c2.id_revir) c  ON c.id_revir = a.id

Pokud obsádku potřebuje jen pro pár řádků, měl by být rychlejší korelovaný poddotaz v select části.

...status_kg,  COUNT( b.id ) ks, (SELECT SUM( c.obsadka ) FROM vr3_bonusy_klient c WHERE c.id_revir = a.id)  obs
JardaB
Profil
Moc děkuji.. bonusy budou do sta řádků, vyzkouším oba případy a uvidíme co bude rychlejší..

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