내일배움캠프_데이터분석_2기/TIL

[TIL] camp_day13_240501

단ee 2024. 5. 1. 22:13

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

 

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