sql - 如何从SQL中的某个表中获取按字段的平均差异排序的列

标签 sql sqlite average absolute-value

我有一张像这样的 table :

Table

我必须根据 v 的差值的平均值对行进行排序 field 。

例如:

所有f1:

v1= 1;
v2 = 10;
v3 = 451;
average(f1) = ((abs(1-10))+(abs(10-451)))/3;
average(f2) = ....

所以我必须在后代模式下按这个平均值排序列。

有可能与一个 SQL 查询有关吗?有人能帮我吗?

最佳答案

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

如果您查看这些值:

( abs(1-10) + abs(10-451) ) / 3

如果您总是从较大的值中减去较小的值,则不需要 abs :
( (10-1) + (451-10) ) / 3

不需要内括号,因此您得到:
(10 - 1 + 451 - 10) / 3

在这里可以消去内值10 ,正如您所拥有的 +10-10 .你最终只得到最大和最小值:
(451 - 1) / 3

不管你有多少中间值,它们总是会被自己消除,例如(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

注意:我不确定这个平均差异应该是什么意思,但是您将平均差异除以项目数,但您可能希望将其除以差异数,即比数字少一元素; (count(*) - 1) .

关于sql - 如何从SQL中的某个表中获取按字段的平均差异排序的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032784/

相关文章:

sql - golang sqlite 无法定义查询变量

mysql - 在 mySQL 中对负 float 使用 AVG() 的意外结果

mysql - 聚合查询删除零

c++ - 如何实时找到 OpenCV 轮廓的平均强度

node.js - Nodejs mocha单元测试sqlite3回调未调用插入未执行

mysql - 当表不为空时返回记录

mysql - 减少 MySQL 中的 SELECT 查询时间

mysql - 提高一个大的 mysql 选择性能

java - contentResolver 返回 null

mysql - 如何选择并忽略空格或空白字符串?