[취소되지 않은 진료 예약 조회하기]
PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.
-- 틀리진 않았지만 헷갈렸던 문제
-- 날짜가 밀리초 단위까지 나와있기 때문에 DATE()로 일자까지만 추출하여 비교
SELECT A.APNT_NO,
P.PT_NAME,
P.PT_NO,
D.MCDP_CD,
D.DR_NAME,
A.APNT_YMD
FROM APPOINTMENT A
JOIN PATIENT P ON A.PT_NO = P.PT_NO
JOIN DOCTOR D ON A.MDDR_ID = D.DR_ID
WHERE DATE(A.APNT_YMD) = '2022-04-13' AND A.APNT_CNCL_YN = 'N' AND D.MCDP_CD = 'CS'
ORDER BY A.APNT_YMD;
[자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기]
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
-- 내가 작성한 쿼리
SELECT CAR_ID,
CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능' END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
-- 정답
-- MAX: 동일한 CAR_ID에 대해 여러 행이 있을 경우, '대여중'과 '대여 가능' 중 우선 순위가 높은 값 반환(사전순으로 '대여중')
-- 동일한 CAR_ID에 대해 여러 행이 있는 경우, 2022년 10월 16일에 대여중이라면 대여중을 출력해야하므로 MAX값 사용하여 처리
SELECT CAR_ID,
MAX(IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' ,'대여중', '대여 가능')) AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
[년, 월, 성별 별 상품 구매 회원 수 구하기]
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
-- GROUP BY: 첫 번째 컬럼만 할 경우 오류 발생 가능
-- COUNT(DISTINCT U.USER_ID): 연, 월, 성별이 중복되지 않는 사용자 추출
SELECT YEAR(O.SALES_DATE) YEAR,
MONTH(O.SALES_DATE) MONTH,
U.GENDER,
COUNT(DISTINCT U.USER_ID) USERS
FROM ONLINE_SALE O
JOIN USER_INFO U ON O.USER_ID = U.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER;
'SQL' 카테고리의 다른 글
SQL 코드카타 오답: GROUP BY (1) | 2024.12.06 |
---|---|
SQL 과제 오답: WITH | WITH RECURSIVE | STEDDEV (0) | 2024.12.05 |
SQL 코드카타 오답: HAVING COUNT(*) > 1 | CONCAT | SABSTR (0) | 2024.12.03 |
SQL 코드카타 오답: ROUND | HAVING과 WHRE | FLOOR | MONTH (2) | 2024.12.02 |
SQL 코드카타 오답: DATE_FORMAT | 날짜 계산 | IN (0) | 2024.11.29 |