mysql - 当我得到其他返回行的 null = 0 值时,如何显示其他查询行

标签 mysql database-design left-join coalesce

我有一个三个表,我用来左外连接来查看我所有的诊所名称,包括我需要的数据的总和和计数,我这里有下面的表屏幕截图:

my tables

现在,我的查询如下:

SELECT
tbl_clinics.clinic_name,
COALESCE(COUNT(tbl_check_up.check_up_id),0) AS totalpatient,
COALESCE(SUM(tbl_bill.bill_amt),0) AS totalearn
FROM
tbl_clinics
LEFT OUTER JOIN tbl_check_up ON tbl_clinics.clinic_id = tbl_check_up.clinic_id
LEFT OUTER JOIN tbl_bill ON tbl_bill.bill_id = tbl_check_up.bill_id
WHERE tbl_clinics.user_id = 102

我的查询的输出是这样的:

myresult

问题: 现在,我的问题是我想通过显示空到零值来显示我的其他诊所。在我的数据中,我有 3 个诊所,其 user_id = 102,但为什么只有诊所 1 显示? 。我想要像下面这样的输出,其中显示 tbl_check_up 中没有与账单相同的诊所 ID 为 2 和 3 的值。

+---------------+---------------+------------+
|  Clinic Name  | Total Patient | Total Earn |
+---------------+---------------+------------+
| Clinic 1      |       4       |   800.00   |
+---------------+---------------+------------+
| Clinic 2      |       0       |   0        |
+---------------+---------------+------------+
| Clinic 3      |       0       |   0        |
+---------------+---------------+------------+

最佳答案

这是您的查询(COALESCE() 对于 COUNT() 来说不是必需的):

SELECT c.clinic_name,
       COUNT(cu.check_up_id) AS totalpatient,
       COALESCE(SUM(b.bill_amt), 0) AS totalearn
FROM tbl_clinics c LEFT OUTER JOIN
     tbl_check_up cu
     ON c.clinic_id = cu.clinic_id LEFT OUTER JOIN
     tbl_bill b
     ON b.bill_id = cu.bill_id
WHERE c.user_id = 102
GROUP BY c.clinic_name;

我认为你只需要GROUP BY

关于mysql - 当我得到其他返回行的 null = 0 值时,如何显示其他查询行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42545916/

相关文章:

PHP 获取关联数组 - 从 MySQL 数据库中选择多行

mysql - 将表存储在同一项目的单独数据库中的优点

mysql - 需要根据 Group_concat 的结果连接两个表

where 子句上的 mysql boolean 值

javascript - Node.js Web应用程序的体系结构建议和准则?

mysql - 旋转非规范化行——将多行转换为单行——导致 LEFT JOIN 速度慢

sql - 使用 JOIN 关键字时添加两个条件是一个好习惯吗?

Mysql Sum 不适用于单行结果

php - 我的输入数据无法更新

mysql - 按日期分片跟踪表有缺点吗?