数据库
首页 > 数据库> > mysql-连接表,但空行需要0

mysql-连接表,但空行需要0

作者:互联网

我不知道如何用文字来解释这种情况.所以写例子:

我有一个名为tblType的表:

type_id  |  type_name
---------------------
1        |  abb
2        |  cda
3        |  edg
4        |  hij
5        |  klm

我还有另一个名为tblRequest的表:

req_id  |  type_id  |  user_id  |  duration
-------------------------------------------
1       |  4        |  1002     |  20
2       |  1        |  1002     |  60  
3       |  5        |  1008     |  60
....

因此,我们要做的是为特定用户获取每种类型的持续时间SUM().

这是我尝试的:

    SELECT 
        SUM(r.`duration`) AS `duration`,
        t.`type_id`,
        t.`type_name`
    FROM `tblRequest` AS r
        LEFT JOIN `tblType` AS t ON r.`type_id` = t.`type_id`
    WHERE r.`user_id` = '1002' 
    GROUP BY r.`type_id` 

它可能返回如下内容:

type_id | type_name | duration
-------------------------------
1       |  abb      | 60
4       |  hij      | 20

有用.但是问题是,对于tblRequest中没有行的其他类型,我想获得0作为值.我的意思是我希望输出如下所示:

type_id | type_name | duration
-------------------------------
1       |  abb      | 60
2       |  cda      | 0
3       |  edg      | 0
4       |  hij      | 20
5       |  klm      | 0

我的意思是,它应该获取所有类型的行,但对于tblRequest中没有行的那些类型,其值为0

解决方法:

您可以在tblRequest上执行聚合,然后再进行合并,使用左连接来处理丢失的行,并合并将空值转换为0:

SELECT    t.type_id, type_name, COALESCE(sum_duration, 0) AS duration
FROM      tblType t
LEFT JOIN (SELECT   type_id, SUM(duration) AS sum_duration
           FROM     tblRequest
           WHERE    user_id = '1002'
           GROUP BY type_id) r ON t.type_id = r.type_id

标签:join,aggregate-functions,select,sql,mysql
来源: https://codeday.me/bug/20191120/2040532.html