2021 Dev-Matching: 웹 백엔드 개발자(상반기) - 헤비 유저가 소유한 장소

문제

이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/77487

풀이

-- 호스트 아이디 그룹화를 해서 2이상인 아이디만 추출하면 끝, HAVING으로 한 번에 됨
WITH host AS(
    SELECT *
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID) > 1
)

SELECT p.ID, p.NAME, p.HOST_ID
FROM host s
INNER JOIN PLACES p
ON s.HOST_ID = p.HOST_ID

리뷰

  • 그룹화 후 HAVING을 통해 2이상인 ID를 추출하면 헤비 유저를 필터링할 수 있다.
  • 그 후 조인을 통해 출력을 하면 끝.
  • 새로운 유형처럼 분류가 되어있어서 어려운 문제인가 겁을 먹었었는데 막상 풀어보니 너무 쉬운 문제여서 놀랐다.

String, Date - 취소되지 않은 진료 예약 조회하기

문제

PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/132204

풀이

-- 날짜와 CS, 예약 조건 만족
WITH mcdp AS(
    SELECT *
    FROM APPOINTMENT
    WHERE APNT_YMD LIKE '2022-04-13%'
    AND MCDP_CD = 'CS'
    AND APNT_CNCL_YN = 'N'
),
pt AS(
    SELECT *
    FROM mcdp m
    INNER JOIN PATIENT p
    ON m.PT_NO = p.PT_NO
)

SELECT APNT_NO, PT_NAME, PT_NO, d.MCDP_CD, DR_NAME, APNT_YMD
FROM DOCTOR d
INNER JOIN pt p
ON d.DR_ID = p.MDDR_ID
ORDER BY APNT_YMD

리뷰

  • 테이블이 여러 개 존재하고 조인을 하기 때문에 CTE를 활용하여 접근했다.
  • 필요한 조건을 만족하는 테이블을 생성하고 조인을 통해서 문제를 풀어나갔다.
  • 날짜는 LIKE로 다른 조건도 설정해주고 Key를 설정해서 조인을 하면 충분히 풀 수 있는 문제로 생각보다 쉬운 문제이다.

GitHub

헤비 유저가 소유한 장소
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/3/77487.%E2%80%85%ED%97%A4%EB%B9%84%E2%80%85%EC%9C%A0%EC%A0%80%EA%B0%80%E2%80%85%EC%86%8C%EC%9C%A0%ED%95%9C%E2%80%85%EC%9E%A5%EC%86%8C

취소되지 않은 진료 예약 조회하기
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/4/132204.%E2%80%85%EC%B7%A8%EC%86%8C%EB%90%98%EC%A7%80%E2%80%85%EC%95%8A%EC%9D%80%E2%80%85%EC%A7%84%EB%A3%8C%E2%80%85%EC%98%88%EC%95%BD%E2%80%85%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0

profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글