Я ищу запрос, получая только самую большую.
SELECT results.playerid,
username,
Count(*) AS count
FROM results
LEFT JOIN players
ON results.playerid = players.playerid
WHERE points = 5
GROUP BY playerid
ORDER BY count DESC
Результат:
+-----------+-----------+-------+
| playerID | username | count |
+-----------+-----------+-------+
| 1 | Lorem | 2 |
| 2 | Ipsum | 2 |
| 3 | Dolor | 1 |
+-----------+-----------+-------+
Ожидаемый результат:
+-----------+-----------+-------+
| playerID | username | count |
+-----------+-----------+-------+
| 1 | Lorem | 2 |
| 2 | Ipsum | 2 |
+-----------+-----------+-------+
Не было бы проблем, если бы был только один самый большой.
Какие-нибудь советы?
Сначала вам нужно узнать, какое максимальное значение для group by
SELECT Count(players.playerid) AS count
FROM results
LEFT JOIN players
ON results.playerid = players.playerid
WHERE points = 5
GROUP BY players.playerid
ORDER BY count DESC
LIMIT 1;
Затем вы используете этот запрос для фильтрации нужного результата.
SELECT results.playerid,
username,
Count(players.playerid ) AS count
FROM results
LEFT JOIN players
ON results.playerid = players.playerid
WHERE points = 5
GROUP BY playerid
HAVING COUNT(players.playerid) = (
SELECT Count(players.playerid) AS count
FROM results
LEFT JOIN players
ON results.playerid = players.playerid
WHERE points = 5
GROUP BY players.playerid
ORDER BY count DESC
LIMIT 1
);
ВЫХОД
| playerid | username | count |
|----------|----------|-------|
| 1 | Lorem | 2 |
| 2 | Ipsum | 2 |
COUNT(*)
наCOUNT(players.playerID)
Players.PlayerIDCOUNT(players.playerID)
противном случае вы не получите результат 0, когда левое соединение не нашло соответствия.