如何通过SQL中某些表的字段差异的平均值来排序列

Jac*_*rky 1 sql sqlite average absolute-value

我有一张桌子:

表

我必须按v字段差异的平均值来排序行.

例如:

所有f1:

v1= 1;
v2 = 10;
v3 = 451;
average(f1) = ((abs(1-10))+(abs(10-451)))/3;
average(f2) = ....
Run Code Online (Sandbox Code Playgroud)

所以我必须在后代模式下按此平均值排序.

可以用一个SQL查询吗?有人能帮我吗?

Guf*_*ffa 5

您不必计算所有值之间的差异,您只需要知道最小值,最大值和值的数量.

如果你看看这些值:

( abs(1-10) + abs(10-451) ) / 3
Run Code Online (Sandbox Code Playgroud)

如果你只是总是减去较大的较小的,你不需要abs:

( (10-1) + (451-10) ) / 3
Run Code Online (Sandbox Code Playgroud)

不需要内括号,所以你得到:

(10 - 1 + 451 - 10) / 3
Run Code Online (Sandbox Code Playgroud)

在这里你可以消除内在价值10,就像你拥有+10-10.您最终只得到最大值和最小值:

(451 - 1) / 3
Run Code Online (Sandbox Code Playgroud)

无论你有多少中间值,它们总是被它们自己消除,例如(b-a)+(c-b)+(d-c)+(e-d)+(f-e)= (f-a).

所以,这个SQL将是:

select name, (max(v) - min(v)) / count(*) as averageDiff
from TheTable
group by name
order by averageDiff desc
Run Code Online (Sandbox Code Playgroud)

注意:我不确定这种差异的平均值是什么意思,但是您将平均差异除以项目数量,但您可能希望将其除以差异数量,即比差异少一个物品; (count(*) - 1).