Как сгруппировать все результаты по имени пользователя в таблице и отобразить рейтинг? - PullRequest
1 голос
/ 24 июня 2019

Итак, у меня есть база данных MySQL

CREATE TABLE `all_time_earners` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `image` varchar(250) NOT NULL,
  `username` varchar(250) NOT NULL,
  `earnings` int(11) NOT NULL,
  `rank` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

Вот как выглядит мой стол

id     username      earnings  rank
====================================================
1,          ken,       100,      0
2,          dave,       50,      0
3,          bob,       300,      0
4,          ken,       150,      0
5,          ken,       200,      0

Я пытаюсь перевести имя пользователя в группу GROUP BY, но он не отображает несколько записей для пользователя, использующего

"SELECT * FROM all_time_earners GROUP BY username ORDER BY earnings DESC;"

Проблема в том, что она не суммирует прибыль

  1. Пожалуйста, кто-нибудь может указать мне, что я делаю неправильно?

  2. Как ранжировать этих пользователей, например: пользователь с самым высоким заработком имеет ранг 1, следующий - ранг 2 и т. Д.

1 Ответ

2 голосов
/ 24 июня 2019

С Mysql 5.7 я считаю, что вы можете достичь того, что вы хотите, как это:

SELECT username, 
       SUM(earnings) AS totalEarnings
FROM all_time_earners ate
GROUP BY username
ORDER BY totalEarnings DESC;

А если вы хотите добавить номер ранга:

SET @row_number = 0;

SELECT te.*, 
       @row_number := @row_number + 1 AS rank
FROM (
  SELECT username, 
         SUM(earnings) AS totalEarnings
  FROM all_time_earners ate
  GROUP BY username
  ORDER BY totalEarnings DESC
) te

Проверьте это в этой DB Fiddle

...