오늘 한 일은,
- SQL 공부
- [코드카타] SQL 1문제 풀기 (97번)
- 파이썬 공부
- [코드카타] 알고리즘 1문제 풀기 (61번)
- [라이브 세션] 파이썬 라이브러리 개인과제 해설 수강하기
- 기초 프로젝트
- 기초 프로젝트 주제 선정하기
- 문제 설정을 위한 자료 조사 및 EDA 진행하기
SQL 공부: [코드카타] SQL 문제 풀기 (97번)
원래는 코드카타 문제를 SQL은 3문제, 알고리즘은 1문제씩 풀었는데 프로젝트 기간에는 프로젝트에 더 집중하고자 SQL과 알고리즘 모두 한 문제씩만 풀기로 했다. 분량도 중요하지만, 우선은 우선순위를 고려하면서도 꾸준히 다른 공부도 병행하고 싶어서 아예 안 하는 것보단 조금이라도 풀기로 했다.
97. (1174) Immediate Food Delivery 2
If the customer's preferred delivery date is the same as the order date, then the order is called immediate; otherwise, it is called scheduled.
The first order of a customer is the order with the earliest order date that the customer made. It is guaranteed that a customer has precisely one first order.
Write a solution to find the percentage of immediate orders in the first orders of all customers, rounded to 2 decimal places.
SELECT ROUND((SUM(CASE WHEN order_date = customer_pref_delivery_date THEN 1 ELSE 0 END) / COUNT(*))*100, 2) immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN (
SELECT customer_id,
MIN(order_date)
FROM Delivery
GROUP BY customer_id)
이번에는 한 번에 풀었다.
우선 고객의 첫 번째 주문 데이터만 가져오게끔 WHERE절부터 작성한다. customer_id와 order_date를 쌍으로 확인하는데, 이때 서브쿼리 안에 조회되는 order_date는 해당 고객의 가장 오래된 데이터만 가져오도록 MIN() 함수를 사용한다.
그리고 이제 immediate_percentage 컬럼을 구한다.
집계함수 SUM()에 CASE WHEN 구문을 사용해 order_date와 customer_pref_delivery_date가 일치할 때 1을 더해주는 것으로 그 수를 집계하고, 백분율을 계산하기 위해 분모값으로는 COUNT(*)를 사용해 총 건수를 집계한다.
그 상태에서 100을 곱하고, ROUND() 함수로 소수점 2자리수까지만 나타나도록 설정한다.
파이썬 공부: [코드카타] 알고리즘 문제 풀기 (61번)
61. 로또의 최고 순위와 최저 순위
문제 설명(…민우씨, 그, QR코드로, 아닙니다……)
def solution(lottos, win_nums):
hit = 0 #맞힌 숫자를 저장할 변수
chance = 0 #가려진 숫자를 저장할 변수
for i in lottos: #로또에서 맞힌 숫자와 가려진 숫자를 저장한다
if i in win_nums:
hit += 1
elif i == 0:
chance += 1
rank = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} #몇 개를 맞히는지에 따라 달라지는 등수 정보를 담은 딕셔너리
answer = [rank[hit+chance], rank[hit]] #맞힌 숫자와 맞힐 가능성까지 더해서 최고 순위와 최저 순위를 answer에 담는다
return answer
우선 lottos에서 맞힌 숫자와 가려진 숫자를 for문으로 센다. 한 번에 두 가지 변수를 모두 구하도록 if에 elif도 사용했다.
이제 순위에 관한 부분을 어떻게 작성할까 고민하다가 딕셔너리로 맞힌 숫자와 해당 등수를 쌍으로 묶어서 담았다. 그리고 answer에 맞힌 숫자와 가려진 숫자까지 다 맞았을 경우에 해당하는 등수(= 최고 순위), 그리고 맞힌 숫자만 맞았을 경우에 해당하는 등수(= 최저 순위)를 answer에 담아내도록 했다.
'[내배캠] 데이터분석 6기 > 본캠프 기록' 카테고리의 다른 글
[본캠프 25일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비③ (0) | 2025.03.24 |
---|---|
[본캠프 24일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비② (1) | 2025.03.21 |
[본캠프 22일차] SQL 코드카타, 파이썬 코드카타, 파이썬 공부 (0) | 2025.03.19 |
[본캠프 21일차] SQL 코드카타, 파이썬 코드카타, 파이썬 공부 (0) | 2025.03.19 |
[본캠프 20일차] 파이썬 공부, 파이썬 코드카타, SQL 코드카타 (0) | 2025.03.17 |