2016-06-29 3 views
1

У меня есть список больниц, согласно которым есть средние оценки, уже рассчитанные. Теперь я хотел бы вычислить ранг для списка больниц в соответствии с их средних рейтингами следующего запросомMySQL получить ранг из определенной строки ID

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

Теперь выше запроса работает, когда я хочу, чтобы увидеть все больницы из таблицы, но когда я применяю ИНЕК, как показано ниже, то результат будет неправильным так как с этим он занимает позицию в строке.

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

Если вы продолжите, что вы только что узнали, логически («когда есть только один ListItem, он не может быть заказан») - вы придете к выводу, что вам нужно, чтобы выбрать все строки. Но ничего плохого в том, что вы не можете упаковать их в подзапрос (который разве даже дорогой) и применить Где что:

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. Если вы можете выработать эквивалент, вы можете использовать это. –

Смежные вопросы