【问题标题】:About randomly selecting some rows from a table, then taking the average关于从表中随机选择一些行,然后取平均值
【发布时间】:2014-02-13 17:24:56
【问题描述】:

这是我的问题。

我正在尝试这样做:sql server 上的 db 中的表中有 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

--然后计算四个选中的平均高度

Gender  Avg_Height
M   177

随机选择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 行两次,每次取平均值,最后取两个 avg 高度的平均值。我知道如何多次选择随机行,但不知道如何将最终结果放入数据库中的表中。谢谢。

从 original_table 中选择前 4 个 * 按 newid() 排序

【问题讨论】:

  • 请显示您用于选择随机行的代码。
  • 通过 newid() 从 originaltable order 中选择 top 4 *

标签: sql sql-server loops random cursor


【解决方案1】:

创建一个输出表,然后循环并使用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 部分以更改迭代次数。

【讨论】:

  • 是的。有用。谢谢你。我只需要再迈出一步,即获得 5 次平均值的平均值。 cte 是个好东西。
  • 所以最后一步就是SELECT AVG(Avg_Height) FROM output。如果这充分回答了您的问题,请在问题旁边打勾。如果没有,请详细说明您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 2020-02-03
  • 2016-12-09
  • 2012-11-16
  • 2012-06-14
  • 2015-10-19
相关资源
最近更新 更多