[TIL #13 250307] 한 주가 순삭되고 미뤄둔 일들만 남은 주말이 됨

강민지·2025년 3월 7일
2

데이터분석_TIL

목록 보기
13/81

Daily plan

🌞오전

- 코드카타 SQL 8문제 (60번까지!) 
- 데일리 스크럼
- 파이썬 라이브 세션 10:00~12:00

🔥 오후

- QCC 13:30~(?)
- 데이터분석 파이썬 종합반 5회차 강의

🌝 저녁

- 데일리 스크럼 + TIL 제출

SQL 코드카타

Q53 - 재구매가 일어난 상품과 회원 리스트 구하기


아침부터 머리가 잘 안돌아가서 WHERE절을 붙잡고 고민하다가,, 간신히 GROUP BY HAVING절을 떠올려서 해결했다.

Q54 - 최댓값 구하기


윈도우 함수를 이용하지 않고 'DATETIME' 기준으로 내림차순 정렬한 뒤 첫번째 ROW의 DATETIME을 가져오는 방식을 선택했다.

윈도우 함수를 쓰면 더 간단해진다.

Q55 - 조건에 맞는 사용자 정보 조회하기


주소까지는 CONCAT으로 쉽게 해결했는데, 전화번호 하이픈 넣기에서 약간 멈칫했다. 결국 구글링을 통해 CONCAT과 SUBSTR 함수를 이용해서 해결!

  • 'SUBSTR(TLNO,1,3)'이 1번부터 3번까지를 의미하는 줄 알았는데, 1번부터 "3개"를 의미한다는 걸 새로 배웠다.

하지만 결과는 오답.... 대체 어디가 틀렸다는 건지 한참 고민함..

전체 주소에서 중간에 " " 띄어쓰기를 빼먹어서 오답이었다...^^;

Q56 - 특정 옵션이 포함된 자동차 리스트 구하기


얘는 LIKE를 사용하면 간단하게 해결 가능

Q57 - 조건에 부합하는 중고거래 상태 조회하기

  • CASE WHEN 구문을 작성할 때 자꾸 END를 까먹는다. (잊지말자!)
  • WHERE절에서 DATE형에 대한 조건식을 작성할 때 "" 안에 날짜를 입력해주어야 함. (따옴표없이 작성하면 아무것도 안나온다.)

Q58 - 취소되지 않은 진료 예약 조회하기


APPOINTMENT 테이블과 DOCTOR 테이블에서 MCDP_CD라는 동일한 컬럼을 가지고 있는 것을 보고 무지성으로 조인을 했는데, 그게 오답의 원인이었다.
MCDP_CD는 진료과 코드이기 때문에 같은 코드를 가진 여러명의 의사가 존재했다. APPOINTMENT에서 각 진료 예약에 일치하는 의사 각각을 알맞게 매칭하려면 진료과 코드가 아닌 의사ID를 이용해야 했다.
DOCTOR 테이블에서는 DR_ID, APPOINTMENT 테이블에서는 MDDR_ID로 다른 이름을 가지고 있어서 한 눈에 보지 못했다.

앞으로는 테이블을 꼼꼼하게 확인하는 습관을 갖자!

Q59 - 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기

이건 다음으로 미뤄야겠다...ㅜ

Q60 - 년, 월, 성별 별 상품 구매 회원 수 구하기


아무리봐도 답인데 왜 아니라는 건지 한참을 째려봤다. 틀린 이유는 COUNT를 잘못했기 때문!
문제에서는 "상품을 구매한 회원수"를 집계하라고 했는데, 나는 COUNT(1)로 작성해서 "상품을 구매한 횟수"를 주구장창 세고 있었다.
따라서 COUNT(DISTINCT O.USER_ID)로 바꾸어서 중복없이 USER_ID를 집계하도록 수정했더니 정답이었다.


대망의 첫번째 QCC

1. 이메일 프로모션 고객

이메일 프로모션을 수락한 개인(소매) 고객의 수를 계산하여 출력하시오.
select count(* ) customer_count
from person
where email_promotion in (1,2)
and person_type="IN"

  • 문제에 포함된 컬럼들만 빠르게 스캔하고 나머지는 무시하기
  • email_promotion>=1 / email_promotion<>0 등의 방식으로도 작성 가능
  • 생각 못했는데 count(distinct * )로 쓰는 게 좋았을 것 같음 (다행히 여기 테이블에서는 상관없었다고 함)
  • distinct를 작성하면 어떤 컬럼을 기준으로 count하는지에 따라 결과가 달라질 수 있기 때문에 웬만하면 count해야하는 컬럼에 맞게 쓰는 게 나을 듯 (경우에 따라 차이가 있을수도 있으니까 꼼꼼하게 확인하기) (여기서는 count(1), count(* ) 모두 상관 X)

2. VIP 고객 산출

  • date_format(sh.order_dat,"%Y-%m)="2011-10"
  • sh.status <> 6
  • 굳이 서브쿼리로 테이블 s, 테이블 c 따로 만들어서 조인하지 않고, join을 그냥 바로 연달아서 해주는 게 더 간편하고 좋을 것 같음 (join 3번 하는 건 동일)

내가 작성한 쿼리를 복사해놨어야 했는데 생각을 못했다ㅜ.ㅜ (바보) 대충 복기해서 다시 작성함.

1번 문제는 쉬워서 방심했는데 2번이 생각보다 까다로웠다. 테이블이 4개나 있어서 각 테이블마다 컬럼을 확인하기 쉽지 않았다. 튜터님 피셜 2번 문제가 난이도 '중' 정도에 해당한다고 하셨다.
그리고 2번 쿼리를 작성하는 중에 조금만 타자를 빨리 치면 오류가 발생했다. 침착하게 인내심을 가지고 느린 독수리 타법으로 쿼리를 작성했다..ㅋㅋㅋ

복잡해보였던 2번이 막상 쿼리 작성을 다 끝내고 나니까 그렇게까지 복잡하지는 않았다. 굳이 서브쿼리를 작성해서 쿼리를 길어지게 만들었다는 게 아쉽다. 서브쿼리 없이 여러 테이블을 조인해도 상관이 없다는 걸 깨달았다.

실제 코테를 할 때 주석을 달아서 답안을 제출하는 것도 좋다고 한다. 만약 답을 못구해도 어떤 생각을 했는지 보여주는 용도로 작성하면 면접관 입장에서 좀 더 긍정적으로 봐줄 수도 있다고,,


일기


QCC 다 맞았어요!!! 칭찬 부탁.
다른 분들의 현란한 닉네임들 사이에서 꿋꿋하게 본명을 쓴 나와 정근님...ㅋㅋㅋㅋ

(구)1조 팀원분들이 축하해주셔서 기분이 좋았다><

시험장에 이렇게 모여있는거 뭔가 귀여우면서 약간 징그럽... (죄송합니다)
윌리를 찾아서 같다. 저 어디 있게요~~?~??


바로 요기ㅎㅎ
어느샌가 현유님과 용우님이 내 앞자리에 와있었다. 여전히 끈끈한 (구)1조 사람들...❤

오늘 아침부터 폭풍 코드카타에 파이썬 라이브세션, QCC+해설까지....
정신없이 끌려다니다가 결국 집중력에 한계가 왔다.
결국 계획한 걸 많이 못해서 너무 아쉽다ㅜㅜ
주말 동안 미뤄놓은 것들이랑 WIL 작성까지 다 끝내야지!!!!


벽보고 벌서는거 아니고
누구보다 진지하게 서울 데이트 코스 짜는 중인 13조 사람들 ㅋㅋㅋㅋㅋㅋㅋ
(후기 꼭 알려주세요👀🙄)

0개의 댓글