241203_TIL

J Lee·2024년 12월 3일
1

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

SQL 문제풀이 복습


Leetcode

문제 링크
1트(8/18)에서 괜히 cte를 넣었단 생각을 했다.
바로 구할 수도 있는데.

self join으로 대칭되는 경우를 구해준 다음
least와 greatest를 써서 일정한 기준으로 정렬하고
count가 2 이상인 경우를 찾으면 된다.

SELECT LEAST(c1.X, c1.Y)    AS "x",
       GREATEST(c1.X, c1.Y) AS "y"
FROM   Coordinates c1
       JOIN Coordinates c2
         ON c1.X = c2.Y
            AND c1.Y = c2.X
GROUP  BY 1,
          2
HAVING COUNT(*) >= 2
ORDER  BY 1;

문제 링크
이건 cte를 써서 푸는 게 여러 모로 깔끔하겠다.
안 그러면 서브쿼리가 너무 복잡해질 것 같음..

WITH a
     AS (SELECT city,
                HOUR(call_time) AS "peak_calling_hour",
                Count(*)        AS "number_of_calls"
         FROM   Calls
         GROUP  BY 1,
                   2),
     b
     AS (SELECT city,
                Max(number_of_calls) AS "max"
         FROM   a
         GROUP  BY 1)
SELECT a.city,
       a.peak_calling_hour,
       a.number_of_calls
FROM   a
       JOIN b
         ON a.city = b.city
            AND a.number_of_calls = b.max
ORDER  BY 2 DESC,
          1 DESC;

문제 링크
어렵지 않은 서브쿼리 활용 문제.
1트를 할 때가 부트캠프 끝나갈 때였구나..

SELECT ROUND(SUM(item_count * order_occurrences) / (SELECT
             SUM(order_occurrences)
                                                    FROM   Orders), 2) AS
       "average_items_per_order"
FROM   Orders;
profile
기본기를 소홀히 하지 말자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN