본문 바로가기

DATA/SQL

241211 SQL 코드카타(조건에 맞는 사용자 정보 조회하기, 조건에 부합하는 중고거래 상태 조회하기, 취소되지 않은 진료 예약 조회하기)

1. 조건에 맞는 사용자 정보 조회하기

 

🅰️풀이과정

# SELECT: USER_ID, NICKNAME

  • CONCAT 함수로 전체주소의 형식을 만들어준다. (CITY, STREET_ADDRESS1,2를 붙여줌) 
  • 중간에 " "공백을 삽입해주어 가독성을 높인다. 
  • CONCAT과 SUBSTRING함수로 전화번호 형식을 만들어준다.  1~3까지 절단 후 하이픈(-) 삽입, 4번째에서 4글자 불러오고 하이픈 삽입. 마지막 자리 모두 불러오기 

#FROM절: JOIN함수로 USER_ID와 WRITER_ID를 연결한다. 

 

#GROUP BY: USER_ID기준으로 정렬. 같은 사람이 몇 번 거래했는지 알아야 하므로

 

#HAVING 절로 WRITER_ID가 세번 언급된 사람을 찾는다. 

SELECT U.USER_ID, 
       U.NICKNAME,
       CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) AS 전체주소, 
       CONCAT(SUBSTRING(U.TLNO, 1, 3), '-', SUBSTRING(U.TLNO, 4, 4), '-', SUBSTRING(U.TLNO, 8)) AS 전화번호
FROM USED_GOODS_USER AS U
     JOIN USED_GOODS_BOARD AS B ON U.USER_ID = B.WRITER_ID
GROUP BY 1 
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY 1 DESC;

 

 


 

2. 조건에 부합하는 중고거래 상태 조회하기

 

🅰️풀이방법

#SELECT: BOARD_ID, WRITER_ID, TITLE, PRICE

STATUS값은 CASE WHEN으로 상태별로 구분해야 함. 

 

#WHERE: 2022년 10월 5일에 등록된 거래 내역이 필요하기 때문에 CREATED_DATE가 2022-10-05 항목에 조건을 걸어준다. 

SELECT BOARD_ID, 
       WRITER_ID, 
       TITLE,
       PRICE,
       CASE WHEN STATUS = 'SALE' THEN '판매중' 
        WHEN STATUS = 'RESERVED' THEN '예약중'
        WHEN STATUS = 'DONE' THEN '거래완료' END STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

 


 

3. 취소되지 않은 진료 예약 조회하기

 

🅰️문제풀이

# 출력할 값: 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 

 

# 세 개의 테이블이 주어졌기 때문에 JOIN을 사용해서 서로 이어준다. (해당 문제에서 가장 중요한 것) 

 

# FROM절: DOCTOR테이블과 APPOINTMENT 테이블은 DR_ID와 MDDR_ID를 통해 연결해주고, PATIENT와 APPOINTMENT 테이블을 PT_NO을 통해서 이어준다. 

 

#WHERE절: 예약취소가 안된 사람이므로 APNT_CNCL_YMD 컬럼이 NULL이어야 한다. 

또한 흉부외과 조회를 위해 MDCP_CD = 'CD' 가 되어야 한다. 

마지막으로 APNT_YMD는 2022-04-13과 일치하는 값을 불러온다. 

 

#ORDER BY: APNT_YMD 기준으로 정렬한다. 

SELECT A.APNT_NO, 
       P.PT_NAME,
       P.PT_NO,
       D.MCDP_CD,
       D.DR_NAME, 
       A.APNT_YMD
FROM APPOINTMENT AS A 
     JOIN DOCTOR AS D ON D.DR_ID = A.MDDR_ID
     JOIN PATIENT AS P ON P.PT_NO = A.PT_NO
WHERE A.APNT_CNCL_YMD IS NULL AND A.MCDP_CD = 'CS' AND A.APNT_YMD LIKE '2022-04-13%'
ORDER BY A.APNT_YMD

 

 


오늘은 뭔가 파이썬을 따라가기에 급급한 날이었던 것 같다. 

내일부터는 파이썬 알고리즘도 함께 진행하려고 하는데 조금 더 익숙해지길 바래본다....🤮