작년 인턴을 한 후로 SQL을 완전히 까먹었다.
데이터 분야에서 SQL 능력은 기본 중의 기본이기 때문에..
복습 및 실력 향상을 위해 오늘부터 SQL 코딩 테스트 문제 풀이를 시작했다.
기본적인 것부터 시작해서 난이도 있는 문제 풀이까지 해야겠다.
파이팅..
01. 조건에 맞는 도서와 저자 리스트 출력하기
- BOOK, AUTHOR 두 개의 테이블 존재
- 경제 카테고리에 속하는 도서들의 도서 ID, 저자명, 출판일 리스트를 출력하는 SQL문 작성
- 출판일 기준으로 오름차순 정렬
- 출판일의 데이트 포맷이 예시와 동일해야 정답처리(ex. 2023-01-28)
풀이 코드
JOIN문을 활용하면 풀 수 있는 쉬운 문제이다.
JOIN은 기본적으로 두 테이블 간의 공통 컬럼을 KEY로 연결하여 사용한다.
이 문제에서는 AUTHOR_ID가 공통적으로 두 테이블에 존재하기 때문에 이를 사용해서 문제를 풀었다.
02. 없어진 기록 찾기
- ANIMAL_INS, ANIMAL_OUTS 두 개의 테이블 존재
- 천재지변으로 인해 일부 데이터가 유실
- 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문 작성
* ANIMAL_INS : 보호소에 들어온 동물 리스트 모아놓은 테이블
* ANIMAL_OUTS : 입양 보낸 동물 리스트 모아놓은 테이블
* ANIMAL_ID : 외래키
풀이 코드
문제 내용만 제대로 이해하면 쉬운 문제이다.
ANIMAL_OUTS에는 기록이 있는데, ANIMAL_INS에는 기록이 없는 동물을 찾는 문제로, 두 테이블을 JOIN 해준 후 WHERE절에서 ANIMAL_INS의 ANIMAL_ID(외래키) IS NULL 조건절을 추가해주면 된다.
* 참고 ! 실행결과
03. 그룹별 조건에 맞는 식당 목록 출력하기
- MEMBER_PROFILE, REST_REVIEW 두 테이블 존재
- MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문 작성
- 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성
- 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬
* 서브쿼리 필요
* GROUP BY, ORDER BY, LIMIT 구문 필요
이 문제는...약간 헤맸다
머리가 안 돌아가서.....
풀이 코드
JOIN을 통해 두 테이블을 연결해준 후, WHERE절 안에 서브쿼리를 작성해서 문제를 풀었다.
리뷰를 가장 많이 쓴 회원의 리뷰들을 보여줘야 하므로, MEMBER_ID를 GROUP BY로 묶은 후 ORDER BY 구문을 활용하여 COUNT함수를 써서 내림차 정렬을 했다.
LIMIT 1이라는 조건을 주어 내림차 정렬에 따른 가장 많은 리뷰들을 쓴 회원의 아이디가 선택되게 했다.
* 참고 ! 실행결과
'Data > SQL' 카테고리의 다른 글
[HackerRank] Occupations, The PADS. 문제 풀이 (MySQL) (0) | 2023.02.06 |
---|---|
[SQLZOO] JOIN 문제 풀이 (0) | 2023.02.01 |
[프로그래머스] SQL Kit 문제 풀이(2) (0) | 2023.01.29 |
[프로그래머스] JOIN, 있었는데요 없었습니다 (0) | 2022.01.09 |
[프로그래머스] 동명 동물 수 찾기, 입양 시각 구하기(1) (0) | 2022.01.01 |