SQL 문제풀이 복습
문제 링크
그냥 기본적인 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;