我需要获取 4 个表中每个 id_prevadzka
的计数:
首先我尝试了:
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
但这为 vytoce_pocet
、navstevy_pocet
、akcie_pocet
和 servis_pocet
返回了相同的数字 - 它是number,shop_prevadzky_vytoce
中的 COUNT 是多少。
然后我尝试了(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
但它返回的结果与第一个示例中的结果相同。
我的第二个查询有什么问题?谢谢。
编辑:
为了更好地理解,这可能是我表格中的测试数据:
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
查询应该返回:
id_prevadzka | vytoce_pocet | navstevy_pocet | akcie_pocet | servis_pocet
1 4 2 0 0
2 1 0 1 0
最佳答案
尝试计数不同:
使用你的数据样本
SELECT
p.id_prevadzka,
COUNT(distinct pv.id) AS `vytoce_pocet`,
COUNT(distinct pn.id) AS `navstevy_pocet`,
COUNT(distinct pa.id) AS `akcie_pocet`,
COUNT(distinct ps.id) 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
输出
| id_prevadzka | vytoce_pocet | navstevy_pocet | akcie_pocet | servis_pocet |
|--------------|--------------|----------------|-------------|--------------|
| 1 | 4 | 2 | 0 | 0 |
| 2 | 1 | 0 | 1 | 0 |
关于mysql - SQL - 如何在多个表上使用更多 COUNT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870331/