如何使用窗口函数特别计算一个行值与除该行以外的其他行值之差的总和

时间:2018-10-20 09:59:37

标签: mysql window-functions

特别是使用窗口函数,如何计算一个行值与除该行以外的其他行值之差的总和。

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

总分

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

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

1 个答案:

答案 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