Условие
Таблица Follow(followee, follower) — направленные подписки. Найдите всех пользователей, которые сами имеют подписчиков, и для них верните число подписчиков. Сортировка по followee.
(Адаптация LeetCode 614 «Second Degree Follower»: формально — у кого есть и подписчики, и кого они сами подписаны хоть на кого-то. Здесь упростим до «у кого есть подписчики».)
Решение
Простой вариант
SELECT followee, COUNT(DISTINCT follower) AS num
FROM Follow
WHERE followee IN (SELECT DISTINCT follower FROM Follow)
GROUP BY followee
ORDER BY followee;Логика: оставляем только тех followee, которые сами кого-то подписаны.
Через INNER JOIN
SELECT f1.followee, COUNT(DISTINCT f1.follower) AS num
FROM Follow f1
JOIN Follow f2 ON f2.follower = f1.followee
GROUP BY f1.followee
ORDER BY f1.followee;f2.follower = f1.followee — f1.followee фигурирует как follower в другой записи → значит «второго уровня».
Подводные камни
COUNT(DISTINCT follower). Если в таблице возможны дубли пар (никакой PK), нужно DISTINCT. В LC обычно PK есть — но в проде закладывайтесь.JOINбез DISTINCT. Дубли могут возникнуть от множественности подписокf1.followee.COUNT(DISTINCT ...)спасает.- Самоподписки. Если
follower = followee— в реальных данных бывает. Решите по условию: исключать или нет (обычно — исключать черезWHERE follower <> followee).
Эталонный ответ
Follow JOIN Follow ON f2.follower = f1.followee + COUNT(DISTINCT f1.follower) + GROUP BY f1.followee.