Join 5

[해커랭크] SQL(hard) - 15 Days of Learning SQL 문제 풀이

MS SQL Server를 사용합니다. 테이블 간 관계와 문제가 요구하는 output은 이미지와 같습니다. 유의사항 mysql의 경우, with 구문을 사용할 수 없습니다 : 해커랭크에서는 8.0 이하 버전을 지원합니다. 각 날짜에 최소 1번 이상 submission한 해커란, 기준일자까지 매일매일 submission한 해커를 말합니다. description만 보고서는 이 부분을 제대로 이해하기 어려웠습니다. 이것 때문에 시간을 많이 잡아먹었네요 인라인 뷰 생성(with) with cte as ( select s.hacker_id, h.name, s.submission_date, count(*) as submissions from submissions s left join hackers h on s.ha..

Data/SQL 2024.01.16

[해커랭크] SQL(hard) - Interviews 문제 풀이

MS SQL Server를 사용합니다. 테이블 간 관계와 문제가 요구하는 output은 이미지와 같습니다. 유의사항 mysql의 경우, with 구문을 사용할 수 없습니다 : 해커랭크에서는 8.0 이하 버전을 지원합니다. discussion에서 많이 언급된 질문 컬럼 순서를 맞춰야 정답으로 인정됩니다 : contest_id, hacker_id, name, and the sums of total_submissions, total_accepted_submissions, total_views, and total_unique_views 합계 컬럼 순서에 주의할 것 group by - sum을 두 번 사용할 것 : 인라인 뷰와 메인쿼리에서 모두 사용해야 합니다. 이유는 하단에 기재해두었습니다! discussion..

Data/SQL 2024.01.09

[리트코드] SQL 50 - Advanced Select and Joins 문제 풀이(# 1789, # 180, # 1164)

mysql을 사용합니다. # 1789 Primary Department for Each Employee easy 난이도입니다. 쿼리 작성 자체는 어렵지 않지만 runtime이 안 좋게 나와서 다시 푼 문제입니다. Q. 각 직원의 직원 번호와 주요 부서의 부서 번호를 표시하라. 풀이 key : sub query 서브쿼리 : 하나의 부서에만 소속된 직원의 직원 번호를 추출합니다. 이후 where 절에서 사용합니다. 시간 : 1214ms (수정 이전 1597ms) 메모리 : 0b select employee_id, department_id from Employee where primary_flag = 'Y' or employee_id in ( select employee_id from Employee grou..

Data/SQL 2023.10.16

[리트코드] SQL 50 - Basic Aggregate Functions 문제 풀이(# 1251, # 1174, # 550)

mysql을 사용합니다 # 1251 Average Selling Price easy 난이도이지만 조건이 조금 까다로워서 포스팅 목록에 포함시켰습니다. Q. 각 제품에 대한 평균 판매가를 구하여라. 평균 판매가는 반올림하여 소수점 아래 2자리 수까지 나타내야 한다. 풀이 key : join, ifnull price 테이블을 기준으로 join을 실시합니다 기준 컬럼은 product id와 purchase date입니다 purchase date의 경우, start date와 end date 사이에 있다는 조건이 필요합니다 날짜 조건을 where 절에 포함시킬 경우, null 값으로 잡히지 않기 때문에 on 절에 포함시켜야 합니다 시간 : 1280ms 메모리 : 0b select p.product_id, ifn..

Data/SQL 2023.10.09

[리트코드] SQL 50 - Basic Join 문제 풀이(# 1280, # 570, # 1934)

mysql을 사용합니다. # 1280 Studnets and Examinations easy지만 꽤 난이도가 있습니다. discussion에서도 다들 어렵다고 하더라구요. 테이블은 아래와 같이 구성되어 있습니다. Q. 각 학생이 각 과목의 시험을 치른 횟수를 구하여라(student_id, subject_name 기준 정렬) 풀이 key : cross join, group by cross join : 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인 시험을 치르지 않은 학생(examinations 테이블에 student_id가 없는 경우)도 output에 포함 cross join : 학생 X 과목 테이블 생성 left join : 학생 X 과목 테이블과 시험 응시 테이블 left join 기준 : ..

Data/SQL 2023.10.01
반응형