特别是使用窗口函数,如何计算一个行值与除该行以外的其他行值之差的总和。
例如:滚号,给定学生表的总分
总分
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
我们必须计算每个学生的总和(相对于其他学生的总分的绝对差)。
答案 0 :(得分:0)
即使包括当前行(标记)值,也没关系;因为 ABS(差)在这种情况下将为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