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