240917_TIL

J Lee·2024년 9월 17일

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

SQL 문제풀이 복습

문제 링크
한 번 등장한 숫자가 없을 경우 null로 뜨게 해야 함에 주의.
그래서 where절에서 count(*) = 1로 조건을 주면 안 되고
max(num)으로 처리해야 한다.
(where 절로 조건을 주면 해당하는 값이 없을 경우
그냥 빈 결과가 출력됨)

SELECT Max(num) AS "num"
FROM   (SELECT num
        FROM   mynumbers
        GROUP  BY 1
        HAVING Count(*) = 1) a;

문제 링크

SELECT *
FROM   Cinema
WHERE  description <> 'boring'
       AND id%2 = 1
ORDER  BY rating DESC;

문제 링크
case when을 써서 조건만 빠짐없이 걸어주면
나머지는 기본적인 서브쿼리와 join 활용이라 어려울 게 없는 문제.

  • id가 최대값이 아니면서 홀수 → +1
  • id가 최대값이고 홀수 → 그대로 유지
  • id가 짝수 → 무조건 -1 (최대값이든 아니든 상관없음)
SELECT a.id,
       s2.student
FROM   (SELECT id,
               CASE
                 WHEN s1.id <> (SELECT Max(id)
                                FROM   seat)
                      AND s1.id%2 = 1 THEN s1.id + 1
                 WHEN s1.id = (SELECT Max(id)
                               FROM   seat)
                      AND s1.id%2 = 1 THEN s1.id
                 WHEN s1.id%2 = 0 THEN s1.id - 1
               end AS "new_id"
        FROM   seat s1) a
       LEFT JOIN seat s2
              ON a.new_id = s2.id;
profile
기본기를 소홀히 하지 말자

0개의 댓글