TGViewer
Библиотека баз данных Библиотека баз данных @sql_lib · 10.2K subscribers
Post #290 3.31K
🧠 SQL-задача с подвохом: “Найди самого активного… по количеству разных друзей”

📘 Условие

У тебя есть таблица дружбы:


friends(user_id, friend_id)


Здесь каждая строка означает, что user_id дружит с friend_id.
Записи всегда односторонние: если есть (1, 2), это не значит, что будет (2, 1).

Нужно написать запрос, который найдёт пользователя с наибольшим числом уникальных друзей.

❓ Пример попытки:


SELECT user_id, COUNT(friend_id) AS total_friends
FROM friends
GROUP BY user_id
ORDER BY total_friends DESC
LIMIT 1;


🔍 Вопрос:

1) В чём здесь может быть логическая ошибка?
2) Какую строку подсчитает COUNT(friend_id)?
3) Когда нужно использовать COUNT(DISTINCT friend_id)?
4) Как обойти случай, если один и тот же друг записан несколько раз?

✅ Разбор подвоха

💣 Проблема: один пользователь может быть записан как друг несколько раз, особенно если приложение допускает дубли (или "перезапросы дружбы").

Пример:


INSERT INTO friends VALUES (1, 2), (1, 2), (1, 3);


В этом случае:


SELECT COUNT(friend_id) FROM friends WHERE user_id = 1;
-- → вернёт 3


Но реальных друзей у пользователя 1 — только 2: 2 и 3.

✅ Решение:

Используй COUNT(DISTINCT friend_id):


SELECT user_id, COUNT(DISTINCT friend_id) AS unique_friends
FROM friends
GROUP BY user_id
ORDER BY unique_friends DESC
LIMIT 1;


🎯 Дополнительно можно убрать самого пользователя из списка друзей (на случай ошибок):


WHERE user_id != friend_id


⚠️ Подвох

COUNT() без DISTINCT ловит даже опытных — особенно если в БД возможны дубли
LIMIT 1 не гарантирует "уникального победителя", если у нескольких одинаковый счёт
• Иногда friendship бывает и симметричной, тогда нужна защита от двойного счёта
  • 🔥 6
  • ❤ 1
More from @sql_lib
  1. Sep 17, 2026🔥 Mozilla выпустила 91-страничный отчёт о состоянии open-weight AI — и главный вывод: отк…
  2. Sep 8, 2026🐳 Почему localhost не работает в Docker Приложение подключалось к PostgreSQL на компьютер…
  3. Aug 16, 2026Полный инженерный курс по AI-агентам на русском: от tool calling до production Курс инжене…
  4. Jul 25, 2026Бесплатный учебник по геометрии на целый университетский курс 📐 Euclidean Plane and its R…
  5. Jul 23, 2026SQL-совет: сравнивайте `NULL` через `IS NOT DISTINCT FROM` Обычное сравнение ломается на N…
  6. Jul 23, 2026Команда GigaChat зовёт на вечеринку для AI-разработчиков и исследователей 🎉 29 июля, Сбер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →