按顺序使用最大列值

时间:2012-07-04 13:58:34

标签: mysql sql sql-order-by weighting

我正在尝试按两列排序表,每列都有不同的权重。第一个是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的最大值。使用MAX(votes)使查询仅返回具有最高投票数的记录。这可以在一个查询中完成吗?

2 个答案:

答案 0 :(得分:2)

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

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

示例小提琴here

答案 1 :(得分: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