SQL_LIB Telegram 290
🧠 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



tgoop.com/sql_lib/290
Create:
Last Update:

🧠 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 бывает и симметричной, тогда нужна защита от двойного счёта

BY Библиотека баз данных


Share with your friend now:
tgoop.com/sql_lib/290

View MORE
Open in Telegram


Telegram News

Date: |

As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously. How to Create a Private or Public Channel on Telegram? Step-by-step tutorial on desktop: With the “Bear Market Screaming Therapy Group,” we’ve now transcended language.
from us


Telegram Библиотека баз данных
FROM American