gpt4 book ai didi

mysql - 连接表但需要 0 空行

转载 作者:可可西里 更新时间:2023-11-01 08:15:04 25 4
gpt4 key购买 nike

我不知道如何用语言来解释这个场景。所以我在写例子:

我有一个名为 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
....

所以我想做的是,为特定用户获取每个 typeduration 的 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

它有效。但问题是,我想获取 0 作为在 tblRequest 中没有行的其他 types 的值。我的意思是我希望输出是这样的:

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

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

最佳答案

您可以对 tblRequest 执行聚合,然后才加入它,使用 left join 处理丢失的行,并使用 coalesce 转换null 到 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

关于mysql - 连接表但需要 0 空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com