如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行

Posted

技术标签:

【中文标题】如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行【英文标题】:How to calculate sum of difference of a row value with respect other rows value excluding the row in particular using window function 【发布时间】:2018-10-20 09:59:37 【问题描述】:

如何计算行值与不包括该行的其他行值的差值之和,特别是使用窗口函数。

例如:不滚动,给定学生表的总分

总分

1 50 ------------- > 计算为 abs(50-60)+abs(50-70)==30

2 60 -------------> 计算为 abs(60-50)+abs(60-70)==20

3 70 -------------> 计算为 abs(70-50)+abs(70-60)==30

我们必须计算每个学生的总和(总分相对于其他学生的绝对差)。

【问题讨论】:

只有 mysql 8 有窗口函数,用你正在使用的版本标记它。你可以用一个连接来代替,它必须是一个窗口函数吗? 这确实不重要,即使您包含当前行(标记)值;因为在这种情况下 ABS(difference) 将为 0,并且不会影响 SUM 除非由于某种原因你必须使用窗口函数执行此操作,否则交叉连接就足够了。 【参考方案1】:

这真的不重要,即使您包括当前行(标记)值;因为 ABS(difference) 在这种情况下将为 0,并且不会影响 SUM

无论如何,在你的情况下,一个简单的“自加入”使用条件 t1.roll_no <> t2.roll_no 就足够了,Group By

SELECT
  t1.roll_no, 
  t1.marks, 
  SUM(ABS(t1.marks - t2.marks)) AS sum_abs_difference 
FROM 
  your_table_name AS t1 
JOIN your_table_name AS t2 
  ON t2.roll_no <> t1.roll_no 
GROUP BY t1.roll_no, t1.marks

【讨论】:

以上是关于如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行的主要内容,如果未能解决你的问题,请参考以下文章

pandas 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组

PySpark:如何根据其他行值的值更改行+列的值

取决于其他相同字段的Mysql行值总和[关闭]

熊猫将行值除以聚合总和,条件由其他单元格设置

使用 Javascript 在动态添加删除行中计算行值和列值

MySQL:用其他行值计算和更新一行?