php - 要计算和分组的范围
问题描述
我有一组值,例如:标题 A的值为27.32,标题 B的值为 27.33,标题 C的值为 27。在这里,我必须检查与哪个标题、值匹配,并且可以在正负3%的公差限制内组合在一起。所以在上面的例子中,B 值在 A 的 +-3% 容限范围内,因此 A 和 B 可以组合在一起。C 不会被归类为不在公差范围内。
现在,如果除了上述值之外,我还有另一个值为 27.01 的标题 D 和值为 26 的 E,那么 C 和 D 也应该组合在一起。
Data:
---------------
Title Values
---------------
A 27.32
B 27.33
C 27
D 27.01
E 26
期待结果
---------------
Title Values
---------------
A,B Derived value in +-3% range of actual value(either title A or B)
C,D Derived value in +-3% range of actual value(either title C or D)
E 26
上面的输出将指定对于标题 A 和 B,我可以使用派生值,对于 C 和 D 也是如此。对于标题 E,未找到匹配项,因此将使用实际值代替
无法为此推导出逻辑。虽然在 +-3% tolorence limit 中创建范围,然后在创建的 tolorence 范围内检查实际值。
解决方案
Assuming the correct values for a and b are 23.32 and 23.33 as started in the body of your question and not 27.32 and 27.33 like in the sample table (Because your desired results don't make sense otherwise), maybe something like this self join?
SELECT CASE WHEN title_b IS NOT NULL THEN title_a || ',' || title_b
ELSE title_a
END AS Title
, CASE WHEN title_b IS NOT NULL THEN 'Derived value in +-3% range of actual value(either title ' || title_a || ' or ' || title_b || ')'
ELSE (SELECT value FROM data AS d WHERE d.title = title_a)
END AS Value
FROM (SELECT DISTINCT
coalesce(min(l.title, r.title), l.title) AS title_a
, max(l.title, r.title) AS title_b
FROM data AS l
LEFT OUTER JOIN data AS r ON l.title <> r.title
AND r.value BETWEEN l.value - (l.value * .03)
AND l.value + (l.value * .03))
ORDER BY title_a;
Which, testing with sqlite (You didn't mention which database you're using, which is always useful to know), produces:
Title Value
---------- ----------------------------------------------------------------
A,B Derived value in +-3% range of actual value(either title A or B)
C,D Derived value in +-3% range of actual value(either title C or D)
E 26
推荐阅读
- c# - 可查询的
.包含带有表达式参数的表达式树 - java - 如何将我的 Java 代码组织到类中
- docker - Docker有一个开放的端口,但配置文件中没有描述?
- android - WorkManager - 如何从定期工作中获取 OutputData
- azure-functions - SubOrchestrator 似乎没有完成
- kubernetes - 版本“kustomize.config.k8s.io/v1beta1”中没有匹配类型“Kustomization”
- circuit-breaker - HALF_OPEN 状态下断路器的行为如何(resilience4j)
- flutter - 如何在 Flutter web 上的桌面浏览器窗口的下角显示 url?
- networking - netgear ac2300 似乎正在杀死我的 VPN 流量如何诊断?
- javascript - vue2vis组件中如何触发鼠标悬停事件