Я предполагаю, что ваша пользовательская таблица выглядит примерно так:
TABLE: user
COLUMN: id int PK
COLUMN: refered_user int FK ON user.id
Редактировать: удалено предложение HAVING и добавлен подзапрос
Без использования HAVING для поиска максимального числаиз рефералов, я добавил новый подзапрос, чтобы найти это:
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
GROUP BY refered_user
)
Затем я использовал это внутри запроса, чтобы получить пользователей, которые ссылались на это много раз:
SELECT refered_user, referals
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS ruser
WHERE referals = (
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS muser
)
Наконец, я использовал это как запрос JOIN:
SELECT u.*
FROM user u
INNER JOIN (
SELECT refered_user, referals
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS ruser
WHERE referals = (
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS muser
)
) AS r ON (r.refered_user = u.id)
Окончание редактирования
Обратите внимание, что несколько пользователей могут иметь одинаковые (максимум)число рефералов, тогда этот запрос может вернуть 0 (для пустой таблицы), 1 или более строк.