2014-02-13 56 views
0

這是我的問題。關於從表中隨機選擇一些行,然後取平均值

我正在嘗試這樣做:在SQL服務器上的數據庫中的表中有x列。我想隨機選擇n%的行進行k次。每次我隨機選擇行之後,我都取一列的平均值。最後,我需要取k時間平均值的平均值。

例如,

原稿臺

Gender Height 
M 182 
M 183 
M 178 
M 165 
M 183 
M 158 
M 192 
M 171 
M 173 
M 165 
M 174 
M 166 
M 188 
M 176 
M 174 
M 162 

隨機選擇1

Gender Height 
M 182 
M 183 
M 178 
M 165 

- 然後計算所選

四個的平均高度

隨機選擇2

Gender Height 
M 158 
M 176 
M 174 
M 171 

- 然後計算所選

Gender Avg_Height 
M 170 

最後四個的平均高度,計算的170和177的平均,這是最後的表。

Gender Avg_Height 
M 173.5 

我從原始表中隨機選取4行,每次取平均值,最後取兩個平均值的平均值。我知道如何多次選擇隨機行,但不知道如何將最終結果放在數據庫的表中。謝謝。

選擇頂部4 *從original_table 爲了通過NEWID()

+0

請顯示您選擇隨機行的代碼。 –

+0

由newid() – user3306972

回答

0

通過創建一個輸出表,然後循環,並使用INSERT INTO填充它:

CREATE TABLE output (Selection INT, Avg_Height FLOAT) 
GO 
DECLARE @intFlag INT 
SET @intFlag = 1 
WHILE (@intFlag <=5) 
BEGIN 

    WITH cte AS (SELECT TOP 4 * 
       FROM Table1 
       ORDER BY NEWID()) 
    INSERT INTO output 
    SELECT @intFlag, AVG(Height*1.0) 
    FROM cte 

SET @intFlag = @intFlag + 1 
END 
GO 

演示:SQL Fiddle

添加ORDER BY NEWID()是隨機化結果順序的一種方法,上面的循環將運行5次,調整WHILE部分以更改迭代次數。

+0

選擇toptable 4 * from originaltable order。是的。有用。謝謝。我只需要再走一步,即獲得5次平均的平均值。該cte是一個很好的東西。 – user3306972

+0

因此,對於您來說最後一步就是'SELECT AVG(Avg_Height)FROM output'。如果這能夠充分回答您的問題,請在問題處勾選複選標記。如果不是,請詳細說明你的問題。 –

相關問題