在视图中创建自己的列并计算不存在的值

问题描述 投票:0回答:1

我有一个视图,除其他外,还输出基于基表中其他状态的状态和 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 此表一样使用它。这应该是灵活的。

sql impala
1个回答
0
投票

这里的理想解决方案是创建一个新的状态表,其中包含每个状态值及其文本映射。然后,将此表连接到您的表并按状态聚合:

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;
© www.soinside.com 2019 - 2024. All rights reserved.