我有一个视图,除其他外,还输出基于基表中其他状态的状态和 ID。
CREATE VIEW MY_TEST
AS
SELECT
ID,
CASE
WHEN status = '´Something' THEN 'New'
WHEN status = '´Something1' THEN 'Old'
WHEN status = '´Something2' THEN 'Current'
WHEN status = '´Something3' THEN 'Next'
WHEN status = '´Something4' THEN 'Now'
END AS my_status
FROM
table;
表格数据: |ID|状态| |--|----------| |1 |某事| |2 |某事| |3 |东西1| |4 |某事| |5 |东西2|
我想计算视图的 ID 并按
my_status
对它们进行分组。到目前为止效果很好。
SELECT
COUNT(ID) count_,
my_status
FROM
my_test
GROUP BY
my_status;
输出:
COUNT_ | 我的状态 |
---|---|
3 | 新 |
1 | 旧 |
1 | 当前 |
期望的输出应该是:
COUNT_ | 我的状态 |
---|---|
3 | 新 |
1 | 旧 |
1 | 当前 |
0 | 下一个 |
0 | 现在 |
但是,即使 my_status 值不存在,如何才能输出所有可能的
my_status
值(可能是)并用 0 填充它们呢?
my_status
值?信息: 可能的 my_status 值未存储在任何其他表中,因此我不能像 JOIN 此表一样使用它。这应该是灵活的。
这里的理想解决方案是创建一个新的状态表,其中包含每个状态值及其文本映射。然后,将此表连接到您的表并按状态聚合:
Table: Status
status | label
Something | New
Something1 | Old
Something2 | Current
Something3 | Next
Something4 | Now
查询:
SELECT s.label, COUNT(t.status) AS cnt
FROM Status s
LEFT JOIN my_status t
ON t.status = s.status
GROUP BY s.label;