240814_TIL

J Lee·2024년 8월 14일
1

아무리 사소하더라도 배움이 없는 날은 없다.

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;
profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보