SQL 코드카타
문제 링크
CTE a를 만들 수 있다면 그 다음부터는 엄청 쉽다.
least와 greatest 조합만 갖고 풀려면
greatest 쪽에 있는 유저의 친구 수를 제대로 구할 수 없기 때문에,
least/greatest, greatest/least 조합을 모두 구해서
union해 주면 친구 수를 구할 수 있다.
본 쿼리에서는 서브쿼리 한 번 쓰는 정도로 쉽게 계산 가능.
WITH a
AS (SELECT Least(user1, user2) AS "user1",
Greatest(user1, user2) AS "user2"
FROM friends
UNION
SELECT Greatest(user1, user2) AS "user1",
Least(user1, user2) AS "user2"
FROM friends
ORDER BY 1),
b
AS (SELECT user1,
Count(*) AS "cnt"
FROM a
GROUP BY 1)
SELECT user1,
Round(100.0 * cnt / (SELECT Count(DISTINCT user1)
FROM a), 2) AS "percentage_popularity"
FROM b
GROUP BY 1
ORDER BY 1;