在两个不同的列中搜索和匹配索引,return 第三列的总和 - Postgresql

Search and match indexes in two different columns, return the sum of a third column - Postgresql

我有一个叫"tax_info"的table,这个table存储了我所在城市的土地税信息,它是这样的:

taxpayer_code  |  condominium_num  |  lot_area  |  built_area
-------------------------------------------------------------
0010030078-2   |     00-0          |   143      |    130
0010030079-1   |     02-7          |   283      |    57
0010030080-1   |     02-7          |   283      |    48
0010030081-1   |     02-7          |   283      |    50

纳税人代码前3位代表市区,后3位代表区内街区,后4位可以代表街区内的地块,如果condo number是00-0,或者公寓或商店等,如果公寓编号不是 00-0,在这种情况下,所有相同的公寓编号均指街区内的同一地段。

我想做的是传递 "taxpayer_code" 的列表并获得 "lot_area" 和 "built_area" 的地块。问题是,如果这个人住在公寓里,她的公寓只占该地块总建筑面积的一小部分。所以,如果我搜索代码 0010030078%(-X 数字无关紧要),结果是: 地块面积 = 143,建筑面积 = 130

但是如果我搜索 0010030080%,我期望的结果是: 地块面积 = 283 和建筑面积 155

如果我搜索 0010030078%、0010030079%,结果: 地块面积 = 426 和建筑面积 285

因此数据库应该获取纳税人代码,然后查看每个通过的代码的公寓编号是否与 00-0 不同,如果不同,它应该将共享同一公寓的所有其他纳税人代码加到总和中同一地区和街区内的号码。 (理想情况下,如果属于不同地区或街区的税码通过,则应返回警告,如果将更多税码添加到总和中,则添加所有代码的列表会很好,但如果这太多了也没关系麻烦!)。

我是 SQL 的新手,无法解决这个问题,非常感谢您能给我的每一个帮助,谢谢!

嗯。 . .使用子查询和 window 函数来添加您想要的值:

select ti.*
from (select ti.*,
             (case when condominium_num <> '00-0'
                   then sum(built_area) over (partition by condominium_num)
                   else built_area
              end) as real_built_area
      from tax_info ti
     ) ti
where . . .