2017-08-03 52 views
9

我有一个大约有100列和30000行的表。 是这个样子:PostgreSQL中不同行中的两列条件

site_id cell_id sector_id value1  value2 
    1   1   1   70  23 
    1   2   1   40  20 
    1   3   1   67  35 
    1   5   2   42  60 
    1   6   2   65  30 
    1   7   2   62  62 
    2   11   1   67  11 
    2   12   1   45  22 
    2   13   1   65  15 

对于一个SITE_ID相同sector_id,如果值1> = 65比在同一部门与值2 < 25的任何单元ID将被归类为“LOW_LOAD_CELL”。 所需的输出将是:

site_id cell_id sector_id value1  value2 cell_status 
    1   1   1   70  23  LOW_LOAD_CELL 
    1   2   1   40  20  LOW_LOAD_CELL 
    1   3   1   67  35 
    1   5   2   42  60 
    1   6   2   65  30 
    1   7   2   62  62 
    2   11   1   67  11  LOW_LOAD_CELL 
    2   12   1   45  22  LOW_LOAD_CELL 
    2   13   1   65  15  LOW_LOAD_CELL 
... 

我不知道如何在SQL接近,诚实。我已经尝试了WHEN CASE,但是当我需要为value2写入条件时,我进行了堆叠。

+0

您的示例数据不符合您的规则。 –

+0

如果这是sector_id = 2的最后一行,您说得对,我编辑过。谢谢。 – jovicbg

+0

这不会有帮助,我对此感到抱歉,但我认为你的问题在于你试图从关系数据库中获得与适合关系数据库(SQL)的语言无关的数据......如果模型,包括与100列的关系符合第三范式... – Arkhena

回答

7

尝试:

select * 
, case when value1>=65 and min(value2) over (partition by site_id, sector_id)<25 then 'LOW_LOAD_CELL' end cell_status 
from your_table 
7

我想你真正想要的逻辑是:

select t.*, 
     (case when max(value1) over (partition by site_it, sector_id) >= 65 and 
        value2 < 25 
      then 'LOW_LOAD_CELL' 
     end) as cell_status 
from t ; 

这符合你的数据 - 如果任何行的部门/网站组合有65 value1或那么当它的value2小于25时,该单元是低负载单元。

+0

如果在同一个site_id和同一个sector_id中,任何cell_id都具有value_1> = 65,而不是在同一site_id中具有值_2 <25并且相同sector_id被分类为“LOW_LOAD_CELL” – jovicbg

+0

@jovicbg的任何cell_id。 。 。单元格2和12表明规则是相反的。 –

+0

不,如果在相同site_id的相同扇区中,任何单元的value1超过65,则那个site_id和sector_id中具有低于25的值2的单元是LOW_LOAD_CELL。单元格1和11的值1超过65,单元格2和12的值2低于25,因此它们是LOW_LOAD_CELL。 – jovicbg

0

您可以试试这个:

select t.*, case when t2.cnt > 0 and value2 < 25 then 'LOW_LOAD_CELL' end cell_status 
from mytable as t left join 
(select site_id, sector_id, count(*) cnt from mytable where 
    value1 >= 65 group by site_id, sector_id) as t2 
on t.site_id = t2.site_id and t.sector_id = t2.sector_id 
相关问题