-
12/08스파르타/TIL(Today I Learned) 2023. 12. 8. 15:41
오늘의 문제 풀이 시작
매번 풀번 프로그래머스가 아닌 다른 외국 사이트에서 문제를 풀고 있다
사이트 이름은 leetcode.com 이다
오늘의 문제 1661. Average Time of Process per Machine
There is a factory website that has several machines each running the same number of processes. Write a solution to find the average time each machine takes to complete a process여기 사이트는 예시가 잘 나오고 설명도 잘 써있어서 이해는 잘 된다.
그저 내 코딩이 막히는 뿐...
외국 코딩러들이 한 풀이를 봤는데 사람들은 재귀호출을 야무딱지게 하는거같다
나는 아직 배우면서 재귀함수를 사용해본적이 없기 때문에 문제가 막힌거였다.
activity_type에 보면 end와 start가 있다.
두개의 timestamp의 차를 구해서 평균을 구하는것이다.
한개의 테이블에서는 두개의 enum을 각각 설정할 수 없어서
재귀호출을 통해 똑같은 테이블을 만들고
timestamp와 activity_type만 다르게 하여 두 테이블의 차이를 만든다.
select a1.machine_id, round(avg(a1.timestamp - a2.timestamp),3) processing_time from Activity a1 , Activity A2 where a1.machine_id = a2.machine_id and a1.process_id = a2.process_id and a1.activity_type = 'end' and a2.activity_type = 'start' group by a1.machine_id
문제 : 1280.Students and Examinations
Write a solution to find the number of times each student attended each exam.
Return the result table ordered by student_id and subject_name.
풀이를 써서 각 학생이 각 시험에 출석한 횟수를 구하여라. student_id와 subject_name이 주문한 결과표를 반환합니다.
SELECT Students.student_id, Students.student_name, Subjects.subject_name, count(Examinations.subject_name) AS attended_exams FROM Students JOIN Subjects LEFT JOIN Examinations ON Students.student_id = Examinations.student_id AND Subjects.subject_name = Examinations.subject_name GROUP BY Students.student_id, Subjects.subject_name ORDER BY student_id, subject_name;
students와 subjects는 서로 겹치는 데이터가 없다.
이 상태에서 join.을 하면 두 테이블 합쳐진
새로운 테이블이 되는데
새로 태어난 테이블 (이하 new라고 부르겠다.)
new 테이블과 Examiantion 테이블을 left join을 한다.
이 둘 사이에는 on 조건으로 연결 될 데이터가 존재하므로
on으로 두 테이블을 연결한다.
https://leetcode.com/problems/students-and-examinations/description/