👩🏻💻 TODAY I LEARN
1. SQL 코드카타
2. 라이브 세션 - python
3. 아티클 미션
4. SQLD 시험 준비
- 이기적 최신기출
- 헷갈리는 부분 정리한 거, 오답 훑어보기
1. 코드카타
1) mysql에서 데이터 길이 조회 방법
당당하게 len 썼다가 틀렸다. .
** mysql 에서는 len 지원 안 됨 ! **
- length : 문자열의 byte 길이 반환
- char_length : 문자열 길이 반환 (literary)
🔶 예시
- LENGTH()
SELECT LENGTH(12345);
결괏값: 5
SELECT LENGTH('Hello');
결괏값: 5
SELECT LENGTH('안녕');
결괏값: 6
- CHAR_LENGTH()
SELECT CHAR_LENGTH(12345);
결괏값: 5
SELECT CHAR_LENGTH('Hello');
결괏값: 5
SELECT CHAR_LENGTH('안녕');
결괏값: 2
한글 문자열의 길이 조회하고 싶을 때는 char_length()를 사용하자.
↪︎ 참고 링크
2) 코드카타 85번
Q. 전날보다 기온이 올라간 id 구하기

방법1. LAG 함수 사용
select id
from
(
select *,
lag(temperature,1) over() as yes_tem
from weather
) a
where temperature > yes_tem
문제 보자마자 어제 공부한 LAG 함수가 생각났다.
이 문제는 테이블 자체가 이미 오름차순으로 정렬되어있어서 따로 정렬을 주지는 않았지만
그렇지 않다면
LAG(temperature,1) over(order by recorddate) 으로 해줘야 한다.
이유 : 바로 직전날의 temperature를 가져오고 싶기 때문에
방법2. 셀프 조인
select w1.id
from weather w1, weather w2
where
w1.recorddate = w2.recorddate + 1
and
w1.temperature > w2.temperature
"recorddate가 하루 뒤인 행과 조인해줘"
조인 조건 첫 번째를 잘 기억해두자.
저런식으로도 조인을 해줄 수 있다 !
3) 코드카타 86번
Q. machine_id별 프로세스 작동 시간의 평균 구하기

방법1. activity_type별로 테이블 분리한 후 조인
select
a.machine_id,
round(avg(b.end - a.start),3) as processing_time
from
(select
machine_id,
process_id,
timestamp as start
from activity
where activity_type = 'start'
group by machine_id, process_id) a
join
(select
machine_id,
process_id,
timestamp as end
from activity
where activity_type = 'end'
group by machine_id, process_id) b
on a.machine_id = b.machine_id
and a.process_id = b.process_id
group by machine_id
너무 1차원적으로 접근했음. ...
피벗을 하고 싶다는 생각이 들기도 했다.
우선 더 좋은 방법이 있을 것 같아 다른 분들의 쿼리를 학습했다.
방법2. end인 행만 뽑은 테이블을 inner join
SELECT
a.machine_id,
a.process_id,
e.timestamp-a.timestamp as time
FROM
activity a
INNER JOIN
(
SELECT machine_id, process_id, timestamp
FROM activity
WHERE activity_type = 'end'
) e
ON a.machine_id = e.machine_id
AND a.process_id = e.process_id
AND a.activity_type = 'start'
굳이 start, end 별로 테이블 2개 만들 필요가 없다.
원래 테이블에 end 행만 뽑은 테이블 조인 시켜주면 됨 !
방법 3. group by해주면 end = max() , start = min() 👍🏼👍🏼👍🏼👍🏼👍🏼
SELECT
machine_id,
process_id,
max(timestamp) - min(timestamp) as time
FROM activity
GROUP BY
machine_id,
process_id
가장 간단하다.
머신, 프로세스별로 그룹핑해주면 end 값은 max로, start값은 min으로 출력 가능하다.
이 쿼리는 그루핑의 의미와 역할을 잘 활용한 것 같다.
2. 라이브 세션 - Python
1️⃣ 파이썬에서 자주 실수하는 유형
1) 함수 정의 후 return 해주기
def greet():
print('Hello!')
message = greet()
print(message)
출력값 : Hello, None
ㄴ 반환값이 없기 때문에 None 출력됨
print 대신 return 을 써서 반환값을 만들어주자 !!
def greet():
return "Hello!"
message = greet()
print(message)
2) 파이썬은 들여쓰기의 문법이다. 오류가 생겼다면 탭을 살펴보자.
3. 아티클 미션
https://rosenps3.tistory.com/39
[아티클 미션] -14 가설 검증
1. 가설 설정2. 가설 검증 방법 설정3. 검증 지표, 목표 수치 설정4. 실험 기간 설정 및 진행5. 데이터 분석 및 가설 검증6. 인사이트 도출 1. 가설 설정 우선순위를 세우고 가장 가치가 높은 가설을
rosenps3.tistory.com
새롭게 만난 팀에서는 화, 금요일 주 2회 하기로 정했다.
오늘은 가설 검증에 관한 첫 번째 아티클!
'데이터 분석' 카테고리의 다른 글
| [day24] 중꺾그마...? (0) | 2025.03.11 |
|---|---|
| [day23] SQL-스칼라 서브쿼리에서 조건주기, 파이썬- 조건문/반복문 (0) | 2025.03.10 |
| [day21] 3주차 WIL (1) | 2025.03.08 |
| [day1] 퍼포먼스 마케터 직무 조사 (0) | 2025.02.17 |
| [사전 미션] 스타터 노트 (3) | 2025.02.05 |