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