微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从具有特定值的行中减去

如何解决从具有特定值的行中减去

我在物化视图中从 10 个不同的表中创建了一个表。

部分看起来像这样

group_name value1 value2
group1 100 20
group2 200 40
未知 300 60
总计 600 120

我必须将值 group_name = 'unkNown' 的行中的所有值重新排列到其他行。决赛桌应该是这样的

group_name value1 value2
group1 200 40
group2 400 80
总计 600 120

“group1”的公式是:

 unkNown x group1 x (TOTAL-unkNown) + group1

该表是用大量代码创建的,请注意 - 我没有写它,它是给我的,我必须使用它。我不喜欢它的样子,所以请不要生气。无论如何,查询看起来像这样:

TABLESPACE pg_default
AS
 WITH table_value1 AS (
         SELECT 
            table1.group_name,table1.value1,FROM table1
        ),table_value2 AS (
         SELECT 
            table2.group_name,table2.value2,FROM table2
        ),TOTAL_groups AS (
         SELECT 
            'value1'::text AS group_name,sum(xy_table."value1")::numeric as results
           FROM xy_table
        UNION ALL
         SELECT 
            'value2'::text AS group_name,sum(xy_table."value2")::numeric as results
           FROM xy_table
        UNION ALL
         SELECT 
            'unkNown'::text AS group_name,sum(xy_table."unkNown")::numeric as results
           FROM xy_table
        ),TOTAL AS (
         SELECT 
            TOTAL_groups.group_name,TOTAL_groups.results
            FROM TOTAL_groups
        UNION ALL           
            'TOTAL'::text AS group_name,round(sum(TOTAL_groups.raba),1) as results
           FROM skupaj_energenti
        )
 SELECT 
    a.group_name,COALESCE(a.results,0::numeric) AS value1,0::numeric) AS value2
  FROM table_value1 a
     LEFT JOIN table_value2 b ON b.group_name = a.group_name
     LEFT JOIN TOTAL c ON f.group_name = a.group_name
WITH DATA;

我不知道我应该如何在 sql 中编写这样的条件。请帮忙。

解决方法

将“未知”行分配给其他行。假设 value1,value2 是 DECIMAL

select group_name,value1 * (1 + k1) value1,value2 * (1 + k2) value2
from tbl
cross join (
    select sum(case group_name when 'unknown' then value1 end) / sum(case group_name when 'TOTAL' then value1 else -value1 end)  k1,sum(case group_name when 'unknown' then value2 end) / sum(case group_name when 'TOTAL' then value2 else -value2 end)  k2
    from tbl
    where group_name in ('TOTAL','unknown')
    ) t
where tbl.group_name not in ('TOTAL','unknown')

db<>fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。