помогите с запросом

invander

Новичок
Добрый день! Никак не могу найти красивое решение на стороне mysql.

Есть табличка ratings


id company_id date net_assets rating_position rating_position_region
1 1 2011-07-01 130265 0 0
1 2 2011-07-01 92490 0 0
1 3 2011-07-01 1659106 0 0
1 4 2011-07-01 2772910 0 0

Есть табличка companys

id region
1 26
2 26
3 26
4 23


Нужно изменить таблицу ratings, так чтобы заполнились поля rating_position и rating_position_region по следующей схеме:

where по date полю и сортировка по net_assets с выводом порядкового номера

rating_position у меня получается заполнить:

UPDATE ratings SET rating_position =(SELECT @a:= @a + 1 FROM (SELECT @a:= 0) s) WHERE DATE='2011-07-01' ORDER BY net_assets DESC;

А как сделать с группировкой по региону никак не соображу :(
 

invander

Новичок
Это ответ на 1 мой вопрос. Как просто посчитать рейтинг. А как с группировкой?
Я сам написал решение

UPDATE ratings AS r,(SELECT *,IF(@typex=yy.region_id,
@rownum:=@rownum+1,
@rownum:=1+LEAST(0,@typex:=yy.region_id)) AS rown FROM (
SELECT r.*,c.region_id FROM ratings AS r
LEFT JOIN companys AS c ON (c.id=r.company_id)
WHERE r.date='2011-07-01' ORDER BY c.region_id, r.net_assets DESC
) yy) hh
SET r.rating_region_position=hh.rown
WHERE r.date='2011-07-01'
AND r.id = hh.id
 

prolis

Новичок
Что имеется в виду под группировкой? Если для каждого региона свой рейтинг, то достаточно обнулять рейтинг при смене региона (как в примере по ссылке).
А вот что возвращает данная конструкция?
Код:
@rownum:=1+LEAST(0,@typex:=yy.region_id)
 
Сверху