Парень Я пытаюсь ранжировать некоторые данные из моей базы данных, и я замечаю, что все идет очень плохо, когда я ставлю группу по выражению;
SET @rank=0;
SELECT @rank:=@rank+1 AS RankSemGenero
,a.nome AS Artista
,f.nome AS Musica
,SUM(rnk.total) AS Tocadas
,rnk.mes AS Mes
,rnk.dia AS Dia
,current_timestamp() AS Criado_Em_Sem_Genero
,23 AS RankComGenero
,current_timestamp() AS Criado_Em_Com_Genero
/*,CASE rnk.categoria
WHEN 1 then 'AM'
WHEN 2 then 'FM'
WHEN 3 then 'Web'
WHEN 4 then 'Comunitaria'
END AS Categoria_Radio*/
,'Todas' AS TipoEmissora
,5 AS Relevancia_Emissora
,'Nacional' AS Local
,5 AS Relevancia_Local
,1 AS fl_ativo
FROM rnk201901 rnk
LEFT JOIN artistas a ON rnk.artista = a.id
LEFT JOIN fonogramas f ON rnk.fonograma = f.id
WHERE rnk.dia = 10
-- AND rnk.fonograma = 35876
-- GROUP BY rnk.fonograma
ORDER BY rnk.total DESC;
Этот код выше, приносящий информацию о правильном пути 1 до....
Но если я изменяю строку GROUP BY, я получаю что-то вроде: 1700 вместо 1.
GROUP BY rnk.fonograma
Любая идея, как обрабатывать эту группу, считая 1 на 1?
Спасибо!!
Вам нужно использовать подзапрос, когда вы используете переменные с group by
:
select (@rank := @rank + 1) as rank, t.*
from (<your aggregation query here with order by>) t cross join
(select @rank := 0) params;
SUM(rnk.total) AS Tocadas