3주차. 벌써 5월이다!!!
학습 내용
- CROSS JOIN(SQL)
- CROSS JOIN : 테이블 사이의 조인 조건이 없는 경우에 사용(= on 다음에 적을 수 있는 공통의 컬럼이 없다)
, 생길 수 있는 모든 데이터의 조합을 반환한다. - 자주 쓰이는 JOIN은 아니지만, 요구하는 포멧을 맞춰야 하는 경우... 틀이나 형식 때문에 사용하는 경우가 있다.
- 아래의 두 테이블을 CROSS JOIN 하는 경우!
Student_id 1 2 Subject Math Science Korean - 다음과 같은 테이블이 생기게 된다
Student_ID Subject 1 Math 1 Science 1 Korean 2 Math 2 Science 2 Korean
- CROSS JOIN : 테이블 사이의 조인 조건이 없는 경우에 사용(= on 다음에 적을 수 있는 공통의 컬럼이 없다)
- Cross join 이용해서 푼 문제
[Leetcode.학생 별 시험에 응시한 횟수 구하기]
SQL
SELECT b.student_id
,b.student_name
,b.subject_name
,if(e.attended_exams is NULL, 0, e.attended_exams) as attended_exams
FROM
(
SELECT *
FROM Students
CROSS JOIN Subjects
) as b
LEFT JOIN
(
SELECT student_id
,subject_name
,count(student_id) as attended_exams
FROM Examinations
GROUP BY 1, 2
) as e
on b.student_id = e.student_id
and b.subject_name = e.subject_name
GROUP BY 1, 2, 3
Order by 1, 3
- 안 풀렸던 문제 해결 과정(Python)
- 문제 : 프로그래머스.나누어 떨어지는 숫자
- 자연수를 담은 배열과 자연수가 주어질 때, 자연수로 배열을 나누어 떨어지는 숫자만 오름차순으로 정렬한 배열 출력
- 풀이 과정 : 배열에 포함되는 매개변수를 반복문으로 정의해서,
나머지가 0인 변수만 .append 메서드로 새로운 리스트에 추가.
나머지가 0 아니고 새로운 리스트의 합이 0 이하일 경우(= 추가된 변수가 없다면) 문제에서 요구한대로 -1 추가 -
Python # 테스트 케이스 실패한 코드 def solution(arr, divisor): answer = [] for i in arr: if i % divisor == 0: answer.append(i) elif i % divisor != 0: if sum(answer) <= 0: if -1 not in answer: answer.append(-1) answer.sort() return answer
- 처음에 주어졌던 테스트 케이스는 통과 됐는데, 나중에 주어지는 테스트 케이스 일부가 안 돼서 실패.
- 아직 뭐 때문에 틀렸던 건지 모르겠다. if로 분기되는 경우의 수가 너무 많아서 실패한 게 아닌가 추측...
- if문을 너무 많이 썼다는 조언을 듣고 아래와 같이 수정해서 성공했다.
Python def solution(arr, divisor): answer = [] for i in arr:x = sum(answer) if x > 0:else:return answer answer.append(-1) answer.sort() if i % divisor == 0: answer.append(i)
고찰 & 기타
- 파이썬 과제 해결하다가... 하루가 다 지났다.
- 문제를 푸는데 필요한 게 뭔지 모르는 것도 크고, 뭘 모르는지 몰라서 질문을 할 수 없는 것도 문제다.
- 지금까지 배웠던 내용에서는 pandas 라이브러리를 통해 dataframe을 다루는 법은 거의 커버하지 않아서 새로운 것을 배우는 기분이라 더 그런 것 같다...
'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글
[TIL] camp_day15_240503 (0) | 2024.05.03 |
---|---|
[TIL] camp_day14_240502 (0) | 2024.05.02 |
[TIL] camp_day12_240430 (0) | 2024.04.30 |
[TIL] camp_day11_240429 (0) | 2024.04.29 |
[TIL] camp_day10_240426 (0) | 2024.04.26 |