241011_TIL

J Lee·2024년 10월 11일

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

SQL 문제풀이 복습

문제 링크
group_concat을 아냐 모르냐 묻는 문제.
아무 인자도 안 넣으면 자동으로 구분자(separator)에 콤마(,)가 들어간다.

SELECT sell_date,
       Count(DISTINCT product)                             AS "num_sold",
       Group_concat(DISTINCT product ORDER BY product ASC) AS "products"
FROM   Activities
GROUP  BY 1
ORDER  BY 1;

문제 링크
1트(7/16)처럼 풀 필요가 전혀 없었는데;
생각해보니 저 때는 한창 CTE를 만드는 거에 꽂혀있어서 ('망치 든 사람' 모드)
그래야 할 필요가 없는 문제에도 CTE를 만들어서 푸는 게 버릇이 들어 있던 때였다.

간단한 문제는 간단하게 해결하자.

SELECT DISTINCT title
FROM   Tvprogram t
       JOIN Content c
         ON t.content_id = c.content_id
WHERE  Date_format(program_date, '%Y-%m') = '2020-06'
       AND content_type = 'Movies'
       AND kids_content = 'Y'; 

문제 링크
별로 어렵지 않게 풀 수 있는 문제인데
이 문제는 CTE를 만들어서 푸는 게 가독성 면에서 더 나은 선택인 거 같다.
7/16 1트 풀이를 참고할 것.

SELECT country
FROM   (SELECT caller_id AS "call_id",
               duration
        FROM   Calls c
        UNION ALL
        SELECT callee_id AS "call_id",
               duration
        FROM   Calls c) a
       JOIN (SELECT p.id,
                    c.name AS "country"
             FROM   Person p
                    JOIN Country c
                      ON LEFT(p.phone_number, 3) = c.country_code) b
         ON a.call_id = b.id
GROUP  BY country
HAVING Avg(duration) > (SELECT Avg(duration)
                        FROM   Calls);
profile
기본기를 소홀히 하지 말자

0개의 댓글