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

PostgreSQL:如何根据临界值划分范围?,sql,postgresql,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

我的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为整数且不唯一。C_值整数是临界值。start_r integer和end_r integer是范围的起始值和结束值,而m_value numeric是平均值

对于每一行,我只需要根据c_值修改开始和结束。也就是说,如果遇到临界值,我需要将范围分割为多个部分,否则输出将是相同的。预期结果如下:

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
有人能建议我如何根据临界值分割范围吗?

一种方法是简单的联合所有:

一种方法是简单的联合所有:


提示:最小,最大,联合所有提示:最小,最大,联合所有
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;