MySQL ранжирование запроса не дает ожидаемого значения

У меня следующая ситуация: есть таблица, которая связывает кошельки и разделы. Я должен оценивать пользователей, которые находятся в одном подразделении. Код SQL, который я использую, работает, но когда я пытаюсь поставить номера строк, это дает странные результаты. Я действительно пробовал много разных стратегий, но у меня ничего не получалось.

select * , @curRow := @curRow + 1 AS row_number 
from division_user, 
wallet JOIN   (SELECT @curRow := 0) r
where division_user.division_id in (select division_user.division_id 
                                    from division_user 
                                    where division_user.wallet_id in  
                                            (select wallet.id from wallet where wallet.user_id = 1 )) AND 
division_user.wallet_id = wallet.id 
group by wallet.id 
order by wallet.weekly_profit_value DESC

Результат запроса:

   1,3
   2,5
   3,1

Желаемый результат

    1,1
    2,2
    3,3

1 ответ

Решение

Переменные и group by не всегда работают вместе Кроме того, никогда не используйте запятые в from пункт. Всегда используйте правильный, явный join синтаксис.

select duw.*, (@curRow := @curRow + 1) AS row_number
from (select du.*, w.*
      from division_user du join 
           wallet w 
           on du.wallet_id = w.id
      where du.division_id in (select du2.division_id 
                               from division_user du2
                               where du2.wallet_id in (select w2.id
                                                       from wallet w2
                                                       where w2.user_id = 1
                                                      )
                              ) 
     group by w.id 
    ) duw cross join
    (SELECT @curRow := 0) params
order by w.weekly_profit_value DESC
Другие вопросы по тегам