PostgreSQL:如何根据临界值划分范围?
我的PostgreSQL 9.5数据库中有一个示例数据,如下所示: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
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;