MYSQL последовательность строк с SUM () и ORDER BY - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь упорядочить свои строки по итоговой точке пользователя.

SUM и ORDER BY работают правильно. Но также я хочу добавить порядковые номера строк.

Когда я пытаюсь использовать @row_number, я получаю некоторые числа, но последовательность неверна.

enter image description here

правильный номер столбца должен быть 1,2,3,4 потому что я использую порядок по total_point суммы пользовательских баллов.

Как получить правильную последовательность для столбца num?

SELECT 
users.user_id, 
users.user_hash, 
(@row_number:=@row_number + 1) AS num,
sum(total_point) as total_point

FROM (SELECT @row_number:=0) AS t,user_stats
LEFT JOIN users on users.user_id = user_stats.stats_user_id
WHERE create_date BETWEEN "2020-04-01 00:00:00" AND "2020-04-30 23:59:59"
GROUP BY stats_user_id
ORDER BY total_point DESC

V: mysql 5,7

1 Ответ

2 голосов
/ 19 апреля 2020

Вы должны использовать с общим количеством отсортированных строк и дать им номер

SELECT 
    user_id,
    user_hash,
    users.user_nick,
    (@row_number:=@row_number + 1) AS num,
    total_point
FROM
    (SELECT 
        users.user_id,
        users.user_hash,
        users.user_nick,
        SUM(total_point) AS total_point
    FROM
        user_stats
    LEFT JOIN users ON users.user_id = user_stats.stats_user_id
    WHERE
        create_date BETWEEN '2020-04-01 00:00:00' AND '2020-04-30 23:59:59'
    GROUP BY stats_user_id
    ORDER BY total_point DESC) t1,
    (SELECT @row_number:=0) AS t
ORDER BY num ASC;
...