我在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_r
和c_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
有人可以建议我如何根据临界值分割范围?
答案 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>