我有以下查询:
SELECT a.status, count(a.status) FROM
(SELECT 'Delivered' AS status
UNION ALL SELECT 'Buffered'
UNION ALL SELECT 'Not Delivered'
UNION ALL SELECT 'Not Reported') a
LEFT JOIN
bulk_sms_numbers
ON a.status = bulk_sms_numbers.delivery_status
WHERE bulk_sms_id = 52
GROUP BY a.status;
Run Code Online (Sandbox Code Playgroud)
以下结果:
+-----------+-----------------+
| status | count(a.status) |
+-----------+-----------------+
| Buffered | 10 |
| Delivered | 3200 |
+-----------+-----------------+
Run Code Online (Sandbox Code Playgroud)
我希望结果集包含union all查询中列出的所有可能状态
我需要的示例输出.
+---------------+-----------------+
| status | count(a.status) |
+---------------+-----------------+
| Buffered | 10 |
| Delivered | 3200 |
| Not Delieverd | 0 |
| Not Reported | 0 |
+---------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
我正在使用MySql
将条件从WHERE子句移动到,ON因此过滤将在加入时进行,而不是在最终结果列表中进行.
SELECT a.status, count(a.status)
FROM
(
SELECT 'Delivered' AS status
UNION ALL SELECT 'Buffered'
UNION ALL SELECT 'Not Delivered'
UNION ALL SELECT 'Not Reported'
) a
LEFT JOIN bulk_sms_numbers
ON a.status = bulk_sms_numbers.delivery_status AND
bulk_sms_id = 52
GROUP BY a.status;
Run Code Online (Sandbox Code Playgroud)