mysql - SQL - 如何在多个表上使用更多 COUNT?

标签 mysql sql left-join

我需要获取 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_pocetnavstevy_pocetakcie_pocetservis_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

最佳答案

尝试计数不同:

使用你的数据样本

SQL Fiddle Demo

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/

相关文章:

mysql - 2 使用 parentID 加入一个查询

php - 有什么方法可以将表单从我的服务器提交到 Google Apps 脚本 (.gs) 文件

php - WooCommerce 礼品卡插件实际上在哪里创建数据库记录?

mysql - 多重连接过滤

mysql - 将父数据左连接到多个左连接子数据的简单方法

MySQL根据同一张表上的多个AND条件选择用户ID

c# - 如果 MySQL 表中的字段为空,则更新该字段

MySQL 从同一个表更新值与计数

mysql - 将变量设置为列名 mysql

php - 如何对多个表使用带有 group by 的连接语法