PostgreSQL:如何根据临界值分割范围?

时间:2017-11-25 12:25:16

标签: sql postgresql

我在PostgreSQL 9.5数据库中有一个示例数据,如下所示:

id    c_value   start_r   end_r    m_value
1     171       61        201      19.3
2     89        59        119      22.1
3     47        137       227      18.9
3     47        227       287      0.0
3     47        287       347      27.1
3     47        347       47       6.5
4     65        120       150      14.1

列说明:Id (integer)并非唯一。 C_value (integer)是关键值。 start_r (integer)end_r (integer)是范围的起始值和结束值,而m_value (numeric)是平均值。

对于每一行,我只需要根据start_r修改end_rc_value。也就是说,如果遇到临界值,我需要将范围分割成切片,否则输出将是相同的。预期结果如下:

id    c_value   start_r   end_r    m_value
1     171       61        171      19.3
1     171       171       201      19.3
2     89        59        89       22.1
2     89        89        119      22.1
3     47        137       227      18.9
3     47        227       287      0.0
3     47        287       347      27.1
3     47        347       47       6.5
4     65        120       150      14.1

有人可以建议我如何根据临界值分割范围?

1 个答案:

答案 0 :(得分:2)

一种方法是简单的select id, c_value, start_r, end_r, m_value from t where c_value <= start_r or c_value >= end_r union all select id, c_value, start_r, c_value, m_value from t where c_value > start_r and c_value < end_r union all select id, c_value, c_value, end_r, m_value from t where c_value > start_r and c_value < end_r;

HashMap<String,String>