2016-06-29 18 views
1

私は平均評価が既に計算されているという点で病院のリストを持っています。今私は、クエリ上にクエリMySQLは特定の行IDからランクを取得します

SELECT name, 
      hospitalID, 
      currentAvgRating, 
      @curRank := @curRank + 1 AS rank 
FROM  hospitals h, (SELECT @curRank := 0) r 
ORDER BY currentAvgRating DESC 

を次の中からそれらの平均評価によると、病院のリストのためのランクを計算したかった私は、テーブルからすべての病院を見たいときには、私は以下のような句は、結果が間違っているWHERE適用されたときに動作しますこれは行の位置をとるためです。

SELECT name, 
      hospitalID, 
      currentAvgRating, 
      @curRank := @curRank + 1 AS rank 
FROM  hospitals h, (SELECT @curRank := 0) r where hospitalID = '453085' 
ORDER BY currentAvgRating DESC 

我々は、where句適用するときに、正しい結果を取得する方法はありますか?

答えて

2

あなたはちょうど見つけたもの続行すると、論理的に(「唯一の1のListItemがあった場合、それは注文することができません」) - あなたはすべての行を選択する必要があるという結論に来ます。しかし、それには何も、あなたが(たとえ高価なものをイマイチ)副選択にそれらをパックし、それにWHEREを適用することができます。多くの病院が同じ平均評価を持っている場合は、このための

SELECT * FROM (
    SELECT name, 
      hospitalID, 
      currentAvgRating, 
      @curRank := @curRank + 1 AS rank 
    FROM  hospitals h, (SELECT @curRank := 0) r 
    ORDER BY currentAvgRating DESC 
) toplist 
WHERE toplist.hospitalID = 453085 
+0

これはありがとうございます..多くの病院が同じ平均格付けを持っていれば同じ平均ランクのすべてに同じランクを与えるべきですか?現在、行の位置としてカウントされます。そのようなことが可能なら、助けてください。 – SUN

1

サブクエリで折り返します。

SELECT * FROM (
    SELECT name, 
       hospitalID, 
       currentAvgRating, 
       @curRank := @curRank + 1 AS rank 
    FROM  hospitals h, (SELECT @curRank := 0) r 
    ORDER BY currentAvgRating DESC 
) 
WHERE hospitalID = '453085' 
+0

感謝を...それは可能ではありませんそれは同じ平均格付けであるすべてに同じランクを与えるべきです。現在、行の位置としてカウントされます。そのようなことが可能なら、助けてください。 – SUN

+0

申し訳ありませんがMySQLは私の専門ではありません。 SQL Serverでは、 'DENSE_RANK'関数を使用します。あなたはそれを使用することができます同等物を解決することができれば。 –

関連する問題