Intern
/* Compito 2 Nella rete sociale, agli utenti sono assegnati i seguenti traguardi: 1. "Stella della scuola" viene assegnata allo studente con il maggior numero di amici. 2. "Hachiko" viene assegnato allo studente che ha inviato il maggior numero di richieste di amicizia, ma nessuno degli studenti ha confermato l'amicizia. Stampa gli ID degli studenti che hanno ricevuto il traguardo, così come il nome del loro traguardo. */
sobes.tech AI
Risposta dell'AI
Для решения задачи можно использовать SQL-запросы, предполагая, что есть таблица friend_requests с полями:
sender_id— кто отправил заявкуreceiver_id— кто получил заявкуstatus— статус заявки (confirmedилиpending)
-- 1. «Звезда школы»: школьник с наибольшим количеством подтверждённых друзей
WITH confirmed_friends AS (
SELECT sender_id AS user_id FROM friend_requests WHERE status = 'confirmed'
UNION ALL
SELECT receiver_id AS user_id FROM friend_requests WHERE status = 'confirmed'
),
friend_counts AS (
SELECT user_id, COUNT(*) AS friends_count
FROM confirmed_friends
GROUP BY user_id
),
max_friends AS (
SELECT MAX(friends_count) AS max_count FROM friend_counts
),
star_school AS (
SELECT user_id, 'Звезда школы' AS achievement
FROM friend_counts, max_friends
WHERE friends_count = max_count
),
-- 2. «Хатико»: школьник, который отправил наибольшее количество заявок, но ни одна не подтверждена
unconfirmed_requests AS (
SELECT sender_id AS user_id, COUNT(*) AS sent_count
FROM friend_requests
WHERE status != 'confirmed'
GROUP BY sender_id
),
confirmed_requests AS (
SELECT sender_id AS user_id, COUNT(*) AS confirmed_count
FROM friend_requests
WHERE status = 'confirmed'
GROUP BY sender_id
),
hachiko_candidates AS (
SELECT u.user_id, u.sent_count
FROM unconfirmed_requests u
LEFT JOIN confirmed_requests c ON u.user_id = c.user_id
WHERE COALESCE(c.confirmed_count, 0) = 0
),
max_unconfirmed AS (
SELECT MAX(sent_count) AS max_sent FROM hachiko_candidates
),
hachiko AS (
SELECT user_id, 'Хатико' AS achievement
FROM hachiko_candidates, max_unconfirmed
WHERE sent_count = max_sent
)
SELECT * FROM star_school
UNION ALL
SELECT * FROM hachiko;
Этот запрос выводит id школьников и название их достижения.