我尝试按两列对表进行排序,每列具有不同的权重。第一个是uptime,它是一个介于0和1之间的值,权重为0.3。第二个是votes,它是一个非负整数,权重为0.7。
权重需要乘以一个介于0-1之间的值,所以我将通过将每行的票数除以任何行持有的最大票数来获得投票数。
到目前为止,这是我的查询,它几乎可以工作:
SELECT addr
FROM servers
ORDER BY (0.3 * uptime) +
(0.7 * (votes / 100)) DESC100是硬编码的,应该是votes的最大值。使用MAX(votes)使查询只返回投票数最高的记录。这可以在一个查询中完成吗?
发布于 2012-07-04 22:02:11
您可以使用子查询选择votes的最大值
SELECT addr
FROM servers
ORDER BY (0.3 * uptime) +
(0.7 * (votes / (SELECT MAX(votes) FROM servers))) DESC示例fiddle here。
发布于 2012-07-04 22:04:09
定义一个变量并使用它:
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))) DESChttps://stackoverflow.com/questions/11330556
复制相似问题