5

テーブルを2つの列で並べ替えようとしていますが、それぞれに異なる重みが付いています。1つ目はですuptime。これは0から1までの値で、重みは0.3です。2番目はvotes、です。これは非負の整数であり、重みは0.7です。

重み付けには0-1の値を掛ける必要があるため、各行の投票数を任意の行が保持する最大投票数で割って、これを投票数として取得します。

これはこれまでの私のクエリであり、ほとんど機能します。

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

100はハードコーディングされており、の最大値である必要がありますvotes。を使用MAX(votes)すると、クエリは投票数が最も多いレコードのみを返します。これは単一のクエリで実行できますか?

4

2 に答える 2

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 に答える
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 に答える