Autor Zpráva
salam
Profil *
zapasim tu s jednim problemem a uz si nevim rady...

Mam dejem tomu 4 tabulky v databazi: auta; vymena_pneumatik; vymena_motoru; havarie

tabulka auta je tabulka hlavni a je v ni primarni klic ke vsem dalsim tabulkam, ve kterych je zachyceno kdy probehla vymena ci havarie. Samozrejme, pro kazdou vymenu a havarii je jeden radek v DB. V tomhle by nebyl problem. Problem nastava, kdyz chci udelat souhrnny vypis s pocty vymen a havarii timto zpusobem:

Auto - pneu - motor - havarie
Fabia - 2 - 1 - 5

Dotaz na db mám nasledujici:


SELECT a.auto, COUNT(p.id_pneu) AS pneu, COUNT(m.id_motor) AS motor, COUNT(h.id_havarie) AS havarie

FROM auta AS a
LEFT JOIN vymena_pneu AS p
ON a.id_auto = p.auto
LEFT JOIN vymena_motoru AS m
ON a.id_auto = m.auto
LEFT JOIN havarie AS h
ON a.id_auto = h.auto
GROUP BY a.id_auto
ORDER BY a.id_auto ASC


A tohle mi dela paseku, vzdy se ty soucty zmeni na nejvyssi cislo (napr. kdyz je pocet vymen pneumatik 5 a ostatni 0, pak je u vsech souctu 5). Jak upravit dotaz, aby mi vracel spravne hodnoty?

Nabizi se samozrejme jednoduche reseni, pomoci vice dotazu pak vyselectovat ty soucty u kazdeho auta zvlast, ale to je dlemeho prilis narocne a take chci mi variabilni ORDER BY, aby se dalo radit napriklad podle poctu nehod apod.

Diky za rady
K.
Profil *
Problém je v tom, že máš pospojované tabulky a příkaz count, ti vrátí počet zgroupovaných řádků. Proto ti ty dva různé county vrací pro každou skupinu stejnou hodnotu.
Řešení mě teď úplně z fleku nenapadá.... možná tak použít u každého count ještě distinct, což spočítá jen nenullové řádky. Tedy něco jako:
SELECT a.auto, COUNT(distinct p.id_pneu) AS pneu, COUNT(distinct m.id_motor) AS motor....

Netestoval jsem to, takže nevím, jestli to pomůže.
salam
Profil *
Funguje to, díky moc

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: