일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 클러스터링
- pandas
- 태블로
- jd
- Chat GPT
- GA4
- SQLD
- 머신러닝
- 군집화
- da
- 팀프로젝트
- Python
- 전처리
- SQL
- 최종 프로젝트
- 서브쿼리
- data analyst
- 히트맵
- cross join
- lambda
- 기초통계
- 시각화
- streamlit
- 크롤링
- 데이터 분석
- 데이터분석
- 기초프로젝트
- 프로젝트
- If
- 프롬프트 엔지니어링
- Today
- Total
세조목
TIL(Today I Learned)10일차(23.12.11) 본문
1. SQL
1) 프로그래머스 62번
https://school.programmers.co.kr/learn/courses/30/lessons/151138
62번 문제의 요구사항은 아래와 같다.
#.1 대여시작일이 2022년 9월에 속하는 대여 기록
#. 2 대여 기간이 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시
#. 3 대여 기록 ID를 기준으로 내림차순 정렬
#.1 대여시작일이 2022년 9월에 속하는 대여 기록은
START_DATE LIKE '%2022-09%' 로 나타낼 수 있다.
#.2은 어떻게 나타낼 수 있을까?
기간을 구해야하니 DATEDIFF 함수를 쓸 수 있을 것이다.
DATEDIFF함수는 DATEDIFF(끝나는 시점, 시작 시점)으로
문제에 적용할 경우 DATEDIFF(END_DATE, START_DATE)를 입력하면된다.
그런데 여기서 놓치면 안 되는 것이 하나있다.
DATEDIFF 함수 뒤에 +1을 해줘야하는 것이다.
WHY?
가령 5일에 빌려서 6일에 반납할 경우 6-5 해서 1 이라는 값이 나온다.
그런데 실제 빌린 일수는 5일, 6일 이틀이기때문에 결과값에 +1을 해줘야한다.
그래서 DATEDIFF 함수 뒤에 +1 을 해줘야하는 것이다.
작성한 코드들을 모두 한 데 모은 완성 코드는 아래와 같다.
SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d') START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') END_DATE,
IF(DATEDIFF(END_DATE, START_DATE)+1 >= 30, '장기 대여', '단기 대여') 'RENT_TYPE'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '%2022-09%'
ORDER BY HISTORY_ID DESC
2. PYTHON
1) 프로그래머스 8번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/120829
문제의 요구사항은 위와 같다.
일단 조건이 달려 있으니 if함수를 써야할 것 같다.
그런데 조건이 네개다.
조건이 세개면 if, elif, else 를 쓰면 되는데 네개면 어떻게 해야할까?
간단하다.
elif 한 개 더 쓰면 된다.
그렇게 했을때 완성 코드는 아래와 같다.
def solution(angle):
if(angle<90):
answer = 1
elif(angle == 90):
answer = 2
elif(90<angle<180):
answer = 3
else:
answer = 4
return answer
2) 프로그래머스 9번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/120831
짝수의 값을 모두 더해야한다.
어떻게 코드를 짤 수 있을까?
일단 문제에서 n의 범위를 알려줬는데 아래가 그 범위이다.
n 범위 내에서 정수 n이 뽑혔을때, n 이하의 짝수들은 반복해서 더해질 것이기때문에
for 반복문을 쓸 수 있을 것이다.
def solution(n):
answer = 0
for i in range(2, n+1, 2)
answer+=i
return answer
완성된 코드는 위와 같은데
우리는 짝수들만을 더할 것이기 때문에 range 안에 가장 첫번째로 2를 넣어주고,
n이하의 짝수라고 했으니 범위를 지정해주기 위해 n+1을 해주고,
짝수값만을 구하기 위해 간격을 2로 지정해준다.
그 짝수 값들을 answer에 계속해서 더해주면 최종적으로는 n이하의 짝수를 모두 더한 값이 반환된다.
이 때 answer = answer+i로 작성해도 되지만 또다른 표현 방식인 answer+=i 로 작성하게되면 더 간결하다.
3) 프로그래머스 10번 문제
https://school.programmers.co.kr/learn/courses/30/lessons/120817
문제에서는 numbers의 원소의 평균값을 반환하라고 요구한다.
평균값은 어떻게 구할 수 있을까?
SQL에서처럼 AVG함수가 있다면 좋겠지만 안타깝게도 PYTHON에는 AVG함수가 없기때문에
일반적으로 평균값을 구하는 방식을 활용해야한다.
일반적으로 평균값을 구하는 방식이라함은
전체 값 더하기 / 전체 개수
문제에서 정수 배열 numbers가 매개변수로 주어지기 때문에
numbers안에 있는 모든 값들을 더해주고 그 값을 numbers안에 있는 모든 값의 개수로 나눠주면 된다.
numbers안에 있는 값들을 반복해서 더해줄 것이기때문에 이 문제 역시 for 반복문을 사용한다.
그렇게 했을때 완성된 코드는 아래와 같다.
def solution(nubmers):
answer = 0
for i in numbers:
answer+=i
return answer / len(numbers)
4) rangerange(a, b)와 randint(a, b)함수의 차이
randrange(a, b)의 경우 a부터 b-1까지가 범위이고, randint는 a부터 b까지가 범위이다.
'데이터 분석 공부 > TIL(Today I Learned)' 카테고리의 다른 글
TIL(Today I Learned)12일차(23.12.13) (0) | 2023.12.13 |
---|---|
TIL(Today I Learned)11일차(23.12.12) (0) | 2023.12.12 |
TIL(Today I Learned)9일차(23.12.08) (1) | 2023.12.08 |
TIL(Today I Learned)8일차(23.12.07) (0) | 2023.12.07 |
TIL(Today I Learned)7일차(23.12.06) (4) | 2023.12.06 |