私は次のようなテーブルを持っています:
フィールドの差の平均に応じて行を並べ替える必要がありv
ます。
例えば:
すべてf1:
v1= 1;
v2 = 10;
v3 = 451;
average(f1) = ((abs(1-10))+(abs(10-451)))/3;
average(f2) = ....
したがって、子孫モードでは、この平均順に列を並べ替える必要があります。
1つのSQLクエリで実行できますか?誰かが私を助けることができますか?
私は次のようなテーブルを持っています:
フィールドの差の平均に応じて行を並べ替える必要がありv
ます。
例えば:
すべてf1:
v1= 1;
v2 = 10;
v3 = 451;
average(f1) = ((abs(1-10))+(abs(10-451)))/3;
average(f2) = ....
したがって、子孫モードでは、この平均順に列を並べ替える必要があります。
1つの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
注:この差の平均が何を意味するのかわかりませんが、平均差をアイテムの数で割っていますが、代わりに差の数、つまり数より1少ない数で割ることができます。アイテムの; (count(*) - 1)
。