这是当前的查询:
SELECT status.ct_reconcile_status,
IFNULL(COUNT(status.ct_reconcile_status), 0) AS sch_change_status_num
FROM db_crewops_cm_action status
WHERE status.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' )
AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute
GROUP BY status.ct_reconcile_status;
我想要得到的结果如下所示:
SUCCESS 5
FAILED 9
没关系。问题是我可能会遇到两种状态的结果数均为 0 的情况,在这种情况下我想要这样:
SUCCESS 0
FAILED 0
而不是一个空的结果集(我现在得到的)。我有一个总体想法,我应该连接表本身或使用WITH子句,但我不知道如何开始。
尝试类似的方法:
SELECT a.status AS ct_reconcile_status,
(IFNULL(b.sch_change_status_num,0) + a.num) AS sch_change_status_num
FROM
(SELECT 'SUCCESS' AS status, 0 AS num
UNION
SELECT 'FAILED', 0) a
LEFT JOIN
(SELECT status.ct_reconcile_status,
COUNT(status.ct_reconcile_status) AS sch_change_status_num
FROM db_crewops_cm_action status
WHERE status.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' )
AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute
GROUP BY status.ct_reconcile_status) b
ON a.status = b.ct_reconcile_status
您可以删除status.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' ) AND
,但这可能会更慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)