1

私は次のようなテーブルを持っています:

テーブル

フィールドの差の平均に応じて行を並べ替える必要がありvます。

例えば:

すべてf1:

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

したがって、子孫モードでは、この平均順に列を並べ替える必要があります。

1つのSQLクエリで実行できますか?誰かが私を助けることができますか?

4

1 に答える 1

5

すべての値の差を計算する必要はありません。必要なのは、最小値、最大値、および値の数だけです。

これらの値を見ると:

( 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

注:この差の平均が何を意味するのかわかりませんが、平均差をアイテムの数で割っていますが、代わりに差の数、つまり数より1少ない数で割ることができます。アイテムの; (count(*) - 1)

于 2012-04-05T17:09:51.483 に答える