如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行
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 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组