SQL

[코딩테스트] Level3

Bordercolli 2023. 9. 7. 12:22
728x90

이제 중급자 코스...>< 얼마나 어려울지 기대가 됩니다. BUT 좌절 NO

문제1. 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

JOIN구문 없는 JOIN사용

RIGHT JOIN => FROM A(NULL값이있는테이블) RIGHT JOIN B(NULL값이 없는 테이블) 

LEFT JOIN => FROM A(NULL값이 없는 테이블) LEFT JOIN B(NULL값이 있는 테이블)

 

문제2. 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

DATETIME 도 비교가 가능하다.

문제3. 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

※ 입양을 가지 못한 동물이 3마리 이상인 경우만 입력으로 주어집니다.  ▷ LIMIT 3

RIGHT JOIN, LEFT JOIN 사용할 때는 그림을 그려가면서 하기.

 

문제4. 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

※ 입양을 간 동물이 2마리 이상인 경우만 입력으로 주어집니다.

문제5. 이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.

GROUP BY 와 HAVING은 순서대로 해석하는게 아니라 함께 해석을 해야하는 것이다.

문제6. FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

마지막에 ELSE '값'; 

 

문제7.REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

문제8. 2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

문제9. USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

SELECT 에서 별칭을 정의해주고 HAVING사용이 가능하다!

SELECT 에서 별칭을 정의해주고 HAVING사용이 가능하다!

 

문제10. CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.

정답률 80까지는 정말 무난무난하다 ....................

이제 19문제 남았는데 매우 고비다

 

문제11. (정답률 76%따리...근데 왜 난 힘들지)USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

- 전체주소 붙이기

CONCAT(문자열 또는 컬럼1,문자열 또는 컬럼2...)

EX) CONCAT(CITY, ' ', ...)      

 

- 전화번호에 하이픈 넣기

CONCAT(SUBSTR(컬럼 또는 문자열, 시작위치[인덱스아님], 시작위치부터 몇 개 문자 추출할 것인가?)), '-', SUBSTR(),'-',SUBSTR())

EX) SUBSTR(TELL, 1,3) = 010       # 010 추출됨

 

문제12. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

문제13. USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.

이건 내 힘으로 풀엇다 ㅎ

 

문제14. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

WITH 테이블에사용될별칭 AS (쿼리문...)

'BETWEEN 날짜'를 두 번 가져오는 이유는 서브쿼리는 월이 아닌 CAR_ID만 가져온 것 두번째 "~요."를 8월부터 월별로 처리하기 위해서는 또 'BETWEEN 날짜'를 가져와야지만 처리가 가능하다. 

* RIGHT/ LEFT JOIN
RIGHT JOIN => FROM (NULL이 있는 테이블) RIGHT JOIN B(NULL값이 없는 테이블)
LEFT JOIN => FROM (NULL이 없는 테이블) LEFT JOIN B(NULL값이 있는 테이블)

* CONCAT, SUBSTR
CONCAT(문자열 또는 컬럼1,문자열 또는 컬럼2...)
SUBSTR(컬럼 또는 문자열, 시작위치[인덱스X],시작위치부터 몇 개 문자 추출?) EX) SUBSTR(TELLNUMBER, 1,3)=010

* 서브쿼리
WITH 테이블에사용될별칭 AS (쿼리문)
EX) WITH T AS ( SELECT ...FROM...)

'SQL' 카테고리의 다른 글

[코딩테스트] Level2  (0) 2023.09.06
[코딩테스트] Level1  (0) 2023.09.01
[파이썬으로 SQL] pymysql기반 MySQL다루기  (0) 2023.08.30
[참고] MySQL INDEX  (0) 2023.08.30
[문제풀이] 파이널 테스트  (0) 2023.08.29