241027_TIL

J Lee·2024년 10월 27일
0

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

SQL 문제풀이 복습


Leetcode

문제 링크
그냥 기본적인 join 문제.

SELECT name AS "Customers"
FROM   Customers c
       LEFT JOIN Orders o
              ON c.id = o.customerId
WHERE  o.id IS NULL;

문제 링크
기본적인 window함수 활용 문제.

window함수의 결과는 where절에서 바로 불러올 수 없기 때문에
서브쿼리나 CTE로 먼저 처리하고
거기에서 where를 써서 불러와야 한다.

SELECT transaction_id
FROM   (SELECT transaction_id,
               RANK()
                 OVER(
                   partition BY day
                   ORDER BY amount DESC) AS "row_id"
        FROM   Transactions) a
WHERE  row_id = '1'
ORDER  BY 1;

문제 링크
이것도 위 문제와 구조가 똑같다.
부서명을 불러오기 위해 join을 하는 절차가 한 번 더 있을 뿐이고
그 외의 나머지는 전부 동일.

SELECT Department,
       Employee,
       Salary
FROM   (SELECT d.NAME                    AS "Department",
               e.NAME                    AS "Employee",
               salary,
               RANK()
                 OVER(
                   partition BY departmentId
                   ORDER BY salary DESC) AS "ranking"
        FROM   Employee e
               JOIN Department d
                 ON e.departmentId = d.id) a
WHERE  ranking = '1';

프로그래머스

오늘 프로그래머스 문제는 따로 풀이할 게 없음.

기본적인 select에 where로 조건을 주거나,
group by, 혹은 count나 max처럼 집계함수를 쓰거나,
그게 아니면 join을 쓰는 정도.

문제 링크

SELECT a.APNT_NO,
       p.PT_NAME,
       a.PT_NO,
       a.MCDP_CD,
       d.DR_NAME,
       a.APNT_YMD
FROM   APPOINTMENT a
       JOIN DOCTOR d
         ON a.MDDR_ID = d.DR_ID
       JOIN PATIENT p
         ON a.PT_NO = p.PT_NO
WHERE  APNT_CNCL_YN = 'N'
       AND a.MCDP_CD = 'CS'
       AND DATE_FORMAT(APNT_YMD, '%Y-%m-%d') = '2022-04-13'
ORDER  BY 6;

문제 링크

SELECT DR_NAME,
       DR_ID,
       MCDP_CD,
       DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS "HIRE_YMD"
FROM   DOCTOR
WHERE  MCDP_CD IN ( 'CS', 'GS' )
ORDER  BY 4 DESC,
          1;

문제 링크

SELECT MCDP_CD  AS "진료과 코드",
       COUNT(*) AS "5월예약건수"
FROM   APPOINTMENT
WHERE  DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP  BY 1
ORDER  BY 2,
          1;

문제 링크

SELECT PT_NAME,
       PT_NO,
       GEND_CD,
       AGE,
       IFNULL(TLNO, 'NONE') AS "TLNO"
FROM   PATIENT
WHERE  AGE <= 12
       AND GEND_CD = 'W'
ORDER  BY 4 DESC,
          1;

문제 링크

SELECT MAX(price) AS "MAX_PRICE"
FROM   PRODUCT;
profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보