- Today
1. SQL 코드카타(98번)
2. 알고리즘 코드카타(43번)
3. SQL Challenge 1회차 수강
- Today I Learned
SQL
WITH cte_login AS(
SELECT player_id
, DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id)) = 1 as login
FROM activity
)
SELECT ROUND(SUM(login) / COUNT(DISTINCT player_id), 2) as fraction
FROM cte_login
DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id))=1
event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때 라는 조건이 True 면 1, False 면 0으로 표기된다.
* MIN(event_date) OVER(PARTITION BY player_id)
player_id 별로 최초 로그인 한 날짜구하기
* event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때
= 연속으로 로그인 했을 때
* SQL 에서 True 면 1, False 면 0
그럼 이와 같은 형태로 반환된다.
이렇게 나온 테이블로
로 연속으로 로그인한 player_id 의 숫자를 세어주고
이렇게 나온 결과를 문제에서 요구한데로
2일 연속으로 로그인한 사용자 수 / 전체 사용자 수 를 구해준다.
SQL Challenge 1회차
RANK()
DENSE_RANK()
ROW_NOMBER()
LAG() 앞에 있는 값을 가져오는 것
LAG(컬럼,2) 두번째 앞에 있는 값을 가져오는 것
LEAD() 뒤에 있는 값을 가져오는 것
Python
https://lyj-01.tistory.com/168
def solution(t, p):
answer = 0
n = len(p)
for i in range(len(t)-n+1):
parts = t[i:i+n]
if parts <= p:
answer += 1
return answer
t: "10203"
p: "15"
①
n = len(p)
# p 의 길이를 담을 n 생성
>> n: 2
②
for i in range(len(t)-n+1):
# t 의 길이 - p의 길이 + 1
>> 5-2+1
>> 0~3 까지 반복
③
parts = t[i:i+n]
t 의 부분문자열을 parts 로 추출
>> 10203[0:2]
>> 102
>> 10203[1:3]
>> 020
>> ...
>> parts: 102,020,203
④
if parts <= p:
answer += 1
# parts 가 p 보다 작거나 같으면 answer 에 1 더하기
>> answer: 3
- Next
1. SQL Challenge 1회차 듣기
2. 통계학 1회차 수강
3. 코드카타문제
'TIL' 카테고리의 다른 글
2024-06-03 (1) | 2024.06.03 |
---|---|
2024-06-02 (0) | 2024.06.02 |
2024-05-30 (0) | 2024.05.30 |
2024-05-29 (0) | 2024.05.29 |
2024-05-28 (0) | 2024.05.28 |