MySQL ‘Подзапрос возвращает более 1 строки’ при получении данных таблицы лидеров

#mysql

#mysql

Вопрос:

У меня есть запрос, который получает список игр:

 SELECT 
1 (SELECT count(*) from games a WHERE a.score > g.score) as rank,
score, p.leaderboard_initials, p.operating_system, IF(p.picture_code = 0, p.picture_url, p.picture_code) AS picture_code
FROM games g
inner join players p on (p.google_id = g.google_id)
where p.leaderboard_initials LIKE CONCAT('%', 'db3sq', '%')
ORDER BY score DESC
LIMIT 0, 100;
  

Есть два игрока с одинаковыми инициалами таблицы лидеров, ‘db3sq’:

введите описание изображения здесь

Мне нужно вернуть, в случае ‘db3sq’, две строки, показывающие наивысший балл для каждого игрока. Следующий запрос получает только первую строку:

 set @rank=0;
select (@rank:=@rank 1) rank , max(score)  score, leaderboard_initials, operating_system,  picture_code 
from  (
SELECT 
1 (SELECT count(*) 
from games a WHERE a.score > g.score) as rank,
score, p.leaderboard_initials, p.operating_system, IF(p.picture_code = 0, p.picture_url, p.picture_code) AS picture_code
FROM games g
inner join players p on (p.google_id = g.google_id)
where p.leaderboard_initials LIKE CONCAT('%', 'db3sq', '%')
ORDER BY score DESC
) t  
group by leaderboard_initials 
order by score DESC
LIMIT 0, 100;
  

введите описание изображения здесь

Когда я меняю count(*) на count(DISTINCT p.google_id) , я получаю ошибку Subquery returns more than 1 row . Я чувствую, что должен group_concat как-то использовать. Как я могу получить две строки, показывающие максимальный результат для каждого игрока?

РЕДАКТИРОВАТЬ: Вам, вероятно, также нужно знать, что players имеет primary key google_id то, что является foreign key in games .

Комментарии:

1. Определен ли уникальный ключ для каждого пользователя или вы можете объединить два поля для создания одного?

2. @DagSondreHansen отредактировал вопрос. Спасибо

3. Я бы попробовал создать набор данных, используя уникальные ключи (вместо имен пользователей). Используйте этот запрос в качестве источника данных FROM, а затем разрешите имена пользователей.

4. @DagSondreHansen Прав. На самом деле это имеет смысл. Сейчас я иду на работу, но я мог бы попробовать этот подход вечером. Приветствия.