Задача: 602. Friend Requests II: Who Has the Most Friends
Сложность: medium
Напишите решение для нахождения людей, у которых больше всего друзей, и количества их друзей.
Тестовые случаи сгенерированы так, что только у одного человека больше всего друзей.
Формат результата приведён в следующем примере.
Пример:
Input:
RequestAccepted table:
+--------------+-------------+-------------+
| requester_id | accepter_id | accept_date |
+--------------+-------------+-------------+
| 1 | 2 | 2016/06/03 |
| 1 | 3 | 2016/06/08 |
| 2 | 3 | 2016/06/08 |
| 3 | 4 | 2016/06/09 |
+--------------+-------------+-------------+
Output:
+----+-----+
| id | num |
+----+-----+
| 3 | 3 |
+----+-----+
Explanation:
The person with id 3 is a friend of people 1, 2, and 4, so he has three friends in total, which is the most number than any others.
👨💻 Алгоритм:
1⃣Поскольку человек может подружиться, отправив или приняв запрос дружбы, для подсчета количества друзей у каждого человека объединяем столбцы requester_id и accepter_id в один.
2⃣Используем UNION ALL для сохранения всех дублирующихся значений и переименовываем столбцы в id.
3⃣Подсчитываем, сколько раз каждый id появляется, группируем по id, сортируем по убыванию и берем первую запись для определения человека с максимальным количеством друзей.
😎 Решение:
WITH Combined AS (
SELECT requester_id AS id
FROM friendships
UNION ALL
SELECT accepter_id AS id
FROM friendships
),
FriendCounts AS (
SELECT id, COUNT(*) AS friend_count
FROM Combined
GROUP BY id
ORDER BY friend_count DESC
)
SELECT id, friend_count
FROM FriendCounts
LIMIT 1;
Ставь 👍 и забирай 📚 Базу знаний
Сложность: medium
Напишите решение для нахождения людей, у которых больше всего друзей, и количества их друзей.
Тестовые случаи сгенерированы так, что только у одного человека больше всего друзей.
Формат результата приведён в следующем примере.
Пример:
Input:
RequestAccepted table:
+--------------+-------------+-------------+
| requester_id | accepter_id | accept_date |
+--------------+-------------+-------------+
| 1 | 2 | 2016/06/03 |
| 1 | 3 | 2016/06/08 |
| 2 | 3 | 2016/06/08 |
| 3 | 4 | 2016/06/09 |
+--------------+-------------+-------------+
Output:
+----+-----+
| id | num |
+----+-----+
| 3 | 3 |
+----+-----+
Explanation:
The person with id 3 is a friend of people 1, 2, and 4, so he has three friends in total, which is the most number than any others.
👨💻 Алгоритм:
1⃣Поскольку человек может подружиться, отправив или приняв запрос дружбы, для подсчета количества друзей у каждого человека объединяем столбцы requester_id и accepter_id в один.
2⃣Используем UNION ALL для сохранения всех дублирующихся значений и переименовываем столбцы в id.
3⃣Подсчитываем, сколько раз каждый id появляется, группируем по id, сортируем по убыванию и берем первую запись для определения человека с максимальным количеством друзей.
😎 Решение:
WITH Combined AS (
SELECT requester_id AS id
FROM friendships
UNION ALL
SELECT accepter_id AS id
FROM friendships
),
FriendCounts AS (
SELECT id, COUNT(*) AS friend_count
FROM Combined
GROUP BY id
ORDER BY friend_count DESC
)
SELECT id, friend_count
FROM FriendCounts
LIMIT 1;
Ставь 👍 и забирай 📚 Базу знаний