SQLite组合聚合函数:按Cluster求和后取节点最大Fx绝对值及Loadcase
SQLite查询:集群Fx求和与节点最大绝对值负载工况获取
先把你的原始数据表整理成清晰的表格形式:
原始数据表
| Node | Loadcase | Fx | Cluster |
|---|---|---|---|
| 1 | 1 | 50 | A |
| 2 | 1 | -40 | A |
| 3 | 1 | 60 | B |
| 4 | 1 | 80 | C |
| 1 | 2 | 50 | A |
| 2 | 2 | -50 | A |
| 3 | 2 | 80 | B |
| 4 | 2 | -100 | C |
接下来分两步实现你的需求,也可以根据实际场景合并成一个查询:
第一步:计算同一Cluster的Fx求和(按工况分组)
不同Loadcase是独立的工况,所以我们需要按Loadcase和Cluster分组求和,得到每个工况下各集群的总Fx值:
SELECT Loadcase, Cluster, SUM(Fx) AS Cluster_Fx_Sum FROM your_table_name GROUP BY Loadcase, Cluster;
执行后会得到如下结果:
| Loadcase | Cluster | Cluster_Fx_Sum |
|---|---|---|
| 1 | A | 10 |
| 1 | B | 60 |
| 1 | C | 80 |
| 2 | A | 0 |
| 2 | B | 80 |
| 2 | C | -100 |
第二步:获取每个Node的Fx绝对值最大值及对应Loadcase
这里用窗口函数RANK()给每个节点的Fx绝对值排序,选出排名第一的记录(如果有多个工况达到相同的最大绝对值,会全部列出):
WITH Node_Fx_Abs AS ( SELECT Node, Loadcase, Fx, ABS(Fx) AS Fx_Abs, RANK() OVER (PARTITION BY Node ORDER BY ABS(Fx) DESC) AS rank FROM your_table_name ) SELECT Node, Loadcase, Fx, Fx_Abs AS Max_Abs_Fx FROM Node_Fx_Abs WHERE rank = 1;
执行结果如下:
| Node | Loadcase | Fx | Max_Abs_Fx |
|---|---|---|---|
| 1 | 1 | 50 | 50 |
| 1 | 2 | 50 | 50 |
| 2 | 2 | -50 | 50 |
| 3 | 2 | 80 | 80 |
| 4 | 2 | -100 | 100 |
合并需求:结合集群求和与节点对应的最大绝对值工况
如果你需要的是每个节点对应其所在集群的求和后Fx绝对值最大的工况,可以用下面的查询,通过CTE先计算集群求和,再关联原表并排序:
WITH Cluster_Loadcase_Sum AS ( SELECT Loadcase, Cluster, SUM(Fx) AS Cluster_Fx_Sum FROM your_table_name GROUP BY Loadcase, Cluster ), Node_Cluster_Rank AS ( SELECT t.Node, cls.Loadcase, cls.Cluster_Fx_Sum, ABS(cls.Cluster_Fx_Sum) AS Abs_Cluster_Sum, RANK() OVER (PARTITION BY t.Node ORDER BY ABS(cls.Cluster_Fx_Sum) DESC) AS rank FROM your_table_name t JOIN Cluster_Loadcase_Sum cls ON t.Cluster = cls.Cluster AND t.Loadcase = cls.Loadcase ) SELECT Node, Loadcase, Cluster_Fx_Sum, Abs_Cluster_Sum AS Max_Abs_Cluster_Sum FROM Node_Cluster_Rank WHERE rank = 1;
这个查询会得到每个节点对应的集群求和后绝对值最大的工况信息:
| Node | Loadcase | Cluster_Fx_Sum | Max_Abs_Cluster_Sum |
|---|---|---|---|
| 1 | 1 | 10 | 10 |
| 2 | 1 | 10 | 10 |
| 3 | 2 | 80 | 80 |
| 4 | 2 | -100 | 100 |
注意:把上面的your_table_name替换成你实际的数据表名称哦。
内容的提问来源于stack exchange,提问作者Lumpi
相关产品推荐
相关产品推荐

