2012-07-04 12 views
5

私は2つの列、それぞれ異なる重み付けでテーブルを注文しようとしています。最初は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)を使用すると、クエリーは投票数の最も多いレコードのみを返します。単一のクエリでこれを行うことはできますか?

答えて

2

あなたはvotes

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

例のフィドルhereの最大値を選択するためのサブクエリを使用することができます。

+0

私は彼が 'MAX(投票)によって' 100'を交換したいと思います '、 'MAX(votes)'の 'votes'ではありません。 –

+0

@aF。ありがとう - 間違いを修正しました。 – Sirko

+0

私はなぜそれが理解できませんが、私のdbでは、これは最も多くの票を持つ単一の行を返します。私はphpmyadminから試してみました。照合は重要ですか? – Matt

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 
関連する問題