【问题标题】:Select row with mostly higher value and rarely lower value选择价值大多较高而很少较低的行
【发布时间】:2015-11-01 07:26:17
【问题描述】:

我正在尝试从表中选择一个随机行,但该表中有一个名为 Rate 的列,我希望它返回具有较高速率的行,并且很少返回具有较高速率的行更低的利率,这可能吗?

表:

CREATE TABLE _Random (Code varchar(128), Rate tinyint)

【问题讨论】:

  • select MAX(Rate) Rate, Code from _Random group by Code

标签: sql sql-server random newid


【解决方案1】:

所以你想要一个随机的行,但偏重于比率较高的行?

知道表中有多少行也很好 - 对整个行进行排序有点昂贵。您可能更喜欢使用 row_number 概念而不是按 N 个 guid 排序。

所以... 一种选择是生成一个数字,然后除以 100。想象一下,我们生成一个介于 0 和 1 之间的数字。

.25 给我们 400,.5 给我们 200,.75 给我们 133...注意这里有一条曲线 - 所以更接近 100 的数字出现的频率更高(减去 100 使范围从 1 开始)。

您可以将RAND() 用于0 到1 之间的单个值(这可能已经足够好了),然后进行除法和减法运算以得到一个数字。如果这高于记录数,那么也许会重复?但请尝试为您的部门选择一个适合的值。

如果您需要增加它的权重,您可以将您的 RAND() 值提高一些数字,以使其变平或变陡。做一些实验看看它的样子。

【讨论】:

  • 谢谢!我已经使用了 row_number 和 rand(),它们运行良好。
【解决方案2】:

此查询将获取一个高于平均速率的随机记录

SELECT TOP (1) * FROM _Random 
WHERE Rate>(SELECT AVG(Rate) FROM _Random)
ORDER BY NEWID()

【讨论】:

  • 这个一直返回率最高的行。这一行的比率是 2,而其他的比率是 1。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 2018-04-13
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多