SQL/LeetCode

· SQL/LeetCode
문제 링크https://leetcode.com/problems/delete-duplicate-emails/문제중복 이메일이 있으면 id가 가장 작은 하나의 이메일만 남기고 삭제해라.Keyword : DELETE, SELF JOIN풀이DELETE 문에서 SELF JOIN 사용법을 몰라 처음엔 조금 해맸는데 엄청 간단하게 구현할 수 있는 문제였다.A는 삭제할 테이블, B는 비교할 테이블로 두고 A와 B의 이메일이 같으면서 A의 id가 B의 id보다 더 큰 경우 삭제시켰다.DELETE A FROM Person A, Person BWHERE A.email = B.email and A.id > B.id;
· SQL/LeetCode
문제 링크https://leetcode.com/problems/game-play-analysis-iv/문제처음 로그인한 날로부터 최소 2일 연속 로그인한 플레이어의 비율을 구하시오. 소수점 2자리까지 반올림하여 표시하시오.Keyword : 날짜 함수, GROUP BY풀이다른 날짜는 생각하지 않고 플레이어별 처음 로그인 날짜를 기준으로 한다. 3일 이상 연속은 생각할 필요 없이 2일 연속만 찾으면 된다.플레이어별 (로그인 날짜 - 1)한 날짜가 최초 로그인 날짜인지를 확인하면 된다.전체 플레이어를 COUNT할 때 player_id의 중복을 고려해야 한다.SELECT ROUND(COUNT(*)/(SELECT COUNT(DISTINCT player_id) FROM Activity),2) AS fractionF..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/confirmation-rate/문제사용자의 메시지 확인 비율 구하기. 비율은 확인된 메시지 수/전체 메시지 수로 구함.확인 메시지를 요청하지 않은 사용자의 확인 비율은 0이며 소수점 두자리까지 반올림하시오.Keyword : LEFT JOIN, IF풀이처음엔 COUNT를 사용해서 직접 나눠주려다가 잘 안풀려서 찾아봤더니 AVG와 IF 함수로 풀이하시는 걸 봤다.IF문을 사용해서 'confirmed' 인 것만 더해서 평균내면 확인 비율 구할 수 있다.IF와 그룹 함수를 적절히 활용하기SELECT A.user_id, ROUND(AVG(IF(B.action='confirmed',1,0)),2) AS confirmation_rateFROM Signu..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/students-and-examinations/문제각 학생이 각 시험에 참여한 횟수를 구해라. 없으면 0으로 출력. student_id와 subject_name으로 정렬해라.keyword : CROSS JOIN, LEFT JOIN, GROUP BY풀이처음엔 Subjects 테이블을 사용안하고 풀 수 있나 했는데 0도 출력하기 위해서 CROSS JOIN할 때 사용했다.COUNT 할 때, Examinations 테이블의 student_id로 해야 제대로 카운트된다.GROUP BY 할 때, student_id, subject_name만 사용해도 가능했지만 세 개 다 써주는게 실행시간이 빨랐다.SELECT A.student_id, A.student_..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/average-time-of-process-per-machine/문제여러 컴퓨터가 있는 공장 웹사이트가 있다. 각 기계가 프로세스를 완료하는 데 걸리는 평균 시간을 구하시오.프로세스를 완료하는 시간은 'end' timestamp - 'start' timestamp이고 소수점 이하 3자리에서 반올림하시오.keyword : SELF JOIN, GROUP BY풀이SELF JOIN 하는데 ON절을 이용하여 시작 시간과 끝나는 시간 분리하고 GROUP BY 후 AVG() 함수 활용하기SELECT A.machine_id, ROUND(AVG(B.timestamp-A.timestamp),3) AS processing_timeFROM Activity A IN..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/rising-temperature/  문제어제와 비교해서 온도가 더 높은 날의 id 출력하기Keyword : SELF JOIN, 날짜 함수풀이1. 날짜 함수 DATEDIFF()를 활용하여 SELF JOINDATEDIFF(date1, date2) : 두 날짜 값 사이의 일수 계산SELECT A.idFROM Weather A INNER JOIN Weather BON DATEDIFF(A.recordDate, B.recordDate) = 1WHERE A.temperature > B.temperature; 2. 날짜 함수 DATE_ADD()를 활용하여 SELF JOINDATE_ADD(date, INTERVAL value UNIT) : 날짜에 값만큼 유..
윤시·̑.̮·̑
'SQL/LeetCode' 카테고리의 글 목록