Есть таблица table1
id city
1 Москва
2 Воронеж
3 Самара
Есть таблица table2
id id_city rating
1 1 22
2 1 66
3 1 95
4 2 12
5 2 37
6 2 13
7 3 68
8 3 54
9 3 27
Связь по полям table1.id = table2.id_city
Примерный алгоритм: Берем 1-ый город и выбираем у него самый большой рейтинг. Затем берем 2-ой город и выбираем у него самый большой рейтинг. Тоже самое с 3-им. Затем все повторяется, начинаем с 1-ого города.
Необходимо сделать такой запрос, чтобы результат был следующим:
id_city rating
1 95
2 37
3 68
1 66
2 13
3 54
1 22
2 12
3 27
Ответ
set @pk1 ='';
set @rn1 =1;
SELECT id_city,
rating
FROM
(SELECT id_city,
rating,
@rn1 := if(@pk1=id_city, @rn1+1,1) as rowNumber,
@pk1 := id_city
FROM
(SELECT id_city,
rating
FROM table2
ORDER BY id_city,
rating desc
) A
) B
order by rownumber, id_city
Решение можно проверить тут http://sqlfiddle.com/#!9/3683a4/5
Комментариев нет:
Отправить комментарий