我不知道如何用文字来解释这个场景。所以写下这些例子:
我有一个名为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
....
所以我要做的是为特定用户获取每个duration
的{{1}}的SUM()。
这就是我的尝试:
type
可能会返回这样的内容:
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
中没有行的其他types
的值。我的意思是我希望输出像这样:
tblRequest
我的意思是它应该获取所有类型的行,但是0作为type_id | type_name | duration
-------------------------------
1 | abb | 60
2 | cda | 0
3 | edg | 0
4 | hij | 20
5 | klm | 0
中没有行的那些类型的值
答案 0 :(得分:2)
您可以在tblRequest
上执行聚合,然后加入,使用left join
处理丢失的行,coalesce
将null
转换为0:< / p>
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
答案 1 :(得分:1)
cellfun(@(x) strcmp(x{1}, 'B') && strcmp(x{2}, '1W') && (str2num(x{3}) < 5434) && (str2num(x{4}) > 5436), cellfun(@(x) strsplit(x, '_'), cellname(:)', 'uni', 0))