I need to get the COUNT of each id_prevadzka
IN 4 tables:
First I tried:
SELECT
p.id_prevadzka,
COUNT(pv.id_prevadzka) AS `vytoce_pocet`,
COUNT(pn.id_prevadzka) AS `navstevy_pocet`,
COUNT(pa.id_prevadzka) AS `akcie_pocet`,
COUNT(ps.id_prevadzka) AS `servis_pocet`
FROM shop_prevadzky p
LEFT JOIN shop_prevadzky_vytoce pv ON (pv.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_navstevy pn ON (pn.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_akcie pa ON (pa.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_servis ps ON (ps.id_prevadzka = p.id_prevadzka)
GROUP BY p.id_prevadzka
But this returned the same number for vytoce_pocet
, navstevy_pocet
, akcie_pocet
and servis_pocet
- and it was the number, what was the COUNT in shop_prevadzky_vytoce
.
Then I tried (as is answered here):
SELECT
p.*,
SUM(CASE WHEN pv.id_prevadzka IS NOT NULL THEN 1 ELSE 0 END) AS `vytoce_pocet`,
SUM(CASE WHEN pn.id_prevadzka IS NOT NULL THEN 1 ELSE 0 END) AS `navstevy_pocet`,
SUM(CASE WHEN pa.id_prevadzka IS NOT NULL THEN 1 ELSE 0 END) AS `akcie_pocet`,
SUM(CASE WHEN ps.id_prevadzka IS NOT NULL THEN 1 ELSE 0 END) AS `servis_pocet`
FROM shop_prevadzky p
LEFT JOIN shop_prevadzky_vytoce pv ON (pv.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_navstevy pn ON (pn.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_akcie pa ON (pa.id_prevadzka = p.id_prevadzka)
LEFT JOIN shop_prevadzky_servis ps ON (ps.id_prevadzka = p.id_prevadzka)
WHERE p.cis_status = 1
GROUP BY p.id_prevadzka
ORDER BY p.prevadzka_nazov
But it returned the same results as is in the first example.
Whats wrong in my second query? Thanks.
EDIT:
To understand well, this could be test data in my tables:
shop_prevadzky:
id_prevadzka
1
2
shop_prevadzky_vytoce:
id | id_prevadzka
1 | 1
2 | 1
3 | 1
4 | 1
5 | 2
shop_prevadzky_navstevy:
id | id_prevadzka
1 | 1
2 | 1
shop_prevadzky_akcie:
id | id_prevadzka
1 | 2
shop_prevadzky_servis:
id | id_prevadzka
And the query should return:
id_prevadzka | vytoce_pocet | navstevy_pocet | akcie_pocet | servis_pocet
1 4 2 0 0
2 1 0 1 0