5

我正在尝试按两列排序表格,每列都有不同的权重。第一个是uptime,它是一个介于 0 和 1 之间的值,权重为 0.3。第二个是votes,它是一个非负整数,权重为 0.7。

权重需要乘以 0-1 之间的值,因此我将通过将每行的投票数除以任何行的最大投票数来获得投票。

到目前为止,这是我的查询,它几乎可以工作:

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / 100)) DESC

100 是硬编码的,应该是 的最大值votes。UsingMAX(votes)使查询仅返回投票数最高的记录。这可以在单个查询中完成吗?

4

2 回答 2

2

定义一个变量并使用它:

DECLARE @maxVotes int
SELECT @maxVotes = MAX(votes) from servers

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / @maxVotes)) DESC

或使用子查询order by

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * ( votes / (SELECT MAX(votes) FROM servers))) DESC
于 2012-07-04T14:04:08.937 回答
2

您可以使用子查询来选择最大值votes

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / (SELECT MAX(votes) FROM servers))) DESC

示例小提琴在这里

于 2012-07-04T14:02:10.783 回答