獲得由平均場的差異有序專欄中,我有一個表,如:如何從一些表中的SQL
我在平均值的差的函數命令行v
字段。
例如:
所有F1:
v1= 1;
v2 = 10;
v3 = 451;
average(f1) = ((abs(1-10))+(abs(10-451)))/3;
average(f2) = ....
,所以我必須有這個平均後代模式排序的列。
是否可以使用一個SQL查詢?有人能幫我嗎?
獲得由平均場的差異有序專欄中,我有一個表,如:如何從一些表中的SQL
我在平均值的差的函數命令行v
字段。
例如:
所有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
不要緊,你有多少箇中間值有,他們永遠elliminated本身,例如(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)
。
很好的答案..我會嘗試..因爲我需要這種差異,因爲我必須在圖表上顯示它們 – JackTurky 2012-04-05 17:13:27
你正在使用哪種sql變體? MySQL的? SQL Server 2008? – 2012-04-05 17:01:24
字段'v'應該在最終輸出中嗎? – 2012-04-05 17:02:05
@MattFenwick不,它沒有問題 – JackTurky 2012-04-05 17:03:03