【问题标题】:MySQL-Count rows in more than one table with WHERE condition具有 WHERE 条件的多个表中的 MySQL-Count 行
【发布时间】:2016-09-03 12:09:06
【问题描述】:

当我在查询下运行时分别得到正确的结果。

SELECT COUNT(hospital_id) FROM `hospital` WHERE org_id='1' // Result: 0
SELECT COUNT(pharmacy_id) FROM `pharmacy` WHERE org_id='1' // Result: 1
SELECT COUNT(fire_station_id) FROM `fire_station` WHERE org_id='1' // Result: 3
SELECT COUNT(als_id) FROM `als` WHERE org_id='1' // Result: 3
SELECT COUNT(units_id) FROM `units` WHERE org_id='1'; //Result: 3

但我需要使用 MySQL 的任何概念将所有结果都放在一个单独的位置。

我的尝试:

SELECT COUNT(hospital_id) AS Hospital FROM `hospital` WHERE org_id='1'
UNION
SELECT COUNT(pharmacy_id) AS Pharmacy FROM `pharmacy` WHERE org_id='1'
UNION
SELECT COUNT(fire_station_id) AS Station FROM `fire_station` WHERE org_id='1'
UNION
SELECT COUNT(als_id) AS Als FROM `als` WHERE org_id='1'
UNION
SELECT COUNT(units_id) AS Units FROM `units` WHERE org_id='1';

这是我目前的结果:

    +------------+
    |   Hospital |
    +------------+
    |          0 |
    |          1 |
    |          3 |
    +------------+

这是我想要的结果:

+------------+------------+------------+-------+--------+
|   Hospital |   Pharmacy |   Station  |  Als  |   Units|
+------------+------------+------------+-------+--------+
|          0 |          1 |         3  |     3 |      3 |
+------------+------------+------------+-------+--------+

我也参考堆栈问题Count rows in more than one table with tSQL 但没有得到想要的结果。 请更新我的查询或建议任何其他 MySQL 概念。

感谢大家!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您的具体查询的问题是UNION。使用UNION ALL。事实上,总是使用UNION ALL,除非您特别想承担删除重复项的开销。

    无论如何,您的查询都已接近。将它们作为子查询放在SELECT:

    SELECT (SELECT COUNT(hospital_id) AS Hospital FROM `hospital` WHERE org_id='1') as hospital,
           (SELECT COUNT(pharmacy_id) AS Pharmacy FROM `pharmacy` WHERE org_id='1') as pharmacy,
           (SELECT COUNT(fire_station_id) AS Station FROM `fire_station` WHERE org_id='1') as Station,
           (SELECT COUNT(als_id) AS Als FROM `als` WHERE org_id='1') as als,
           (SELECT COUNT(units_id) AS Units FROM `units` WHERE org_id='1') as units;
    

    您也可以将子查询放在FROM 子句中,并使用CROSS JOIN 组合它们。

    【讨论】:

    • 这很好,很好的解释。谢谢。真的很好。
    【解决方案2】:

    试试这个:

    SELECT
        (SELECT COUNT(hospital_id) FROM hospital WHERE org_id='1') as Hospital,
        (SELECT COUNT(pharmacy_id) FROM pharmacy WHERE org_id='1') as Pharmacy,
        (SELECT COUNT(fire_station_id) FROM fire_station WHERE org_id='1') as Station,
        (SELECT COUNT(als_id) FROM als WHERE org_id='1') as Als,
        (SELECT COUNT(units_id) FROM units WHERE org_id='1') as Units;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2020-04-07
      • 2019-08-25
      • 2020-11-21
      相关资源
      最近更新 更多