본문 바로가기

Database11

[PROGRAMMERS] Lv.4 서울에 위치한 식당 목록 출력하기 => SELECT 문제 REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요. 풀이 논리 과정 서울에 위치한 식당들만을 추리기 위해 WHERE 절에서 필터링 해줘야 함. 리뷰 점수 컬럼은 REST_REVIEW 테이블에만 있기 때문에 JOIN을 사용해야 함. 소수점 3번째 자리에서 반올림 해주기 위해서는 ROUND 함수를 사용해야 함. 각 식당의 평균 리뷰 점수를 출력하기 위해 기본키로 그룹화 시켜줘야 함. 그룹화 시켜주지 .. 2023. 12. 4.
[PROGRAMMERS] Lv.4 식품분류별 가장 비싼 식품의 정보 조회하기 => GROUP BY 문제 FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요. 풀이 논리 과정 "식품분류별로" : GROUP BY를 사용해야 함. "가격이 제일 비싼" : MAX() 함수를 사용해야 함. "식품분류가 '과자', '국', '김치', '식용유'인 경우" : IN 명령어를 통해 코드 간소화 풀이 서브쿼리를 사용하는 방법 SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용.. 2023. 11. 30.
[PROGRAMMERS] Lv.3 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 => GROUP BY 문제 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요. 풀이 논리 과정 "2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들"을 먼저 구한다고 생각하기 SELECT 절에 월, 자동차 ID, 총 대여 횟수 출력 월별, 자동차 ID 별에 대한 총 대여 횟수이기 때문에 G.. 2023. 11. 27.
[PROGRAMMERS] Lv.3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 => GROUP BY 문제 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요. 풀이 논리 과정 같은 CAR_ID 중에서도 2022년 10월 16일이 포함되지 않은 컬럼이 있을 수 있기 때문에, 2022년 10월 16일이 대여 기간에 한 번이라도 포함된 적이 있는 자동차를 찾는 문제라고 이해하면 쉽다. 만약 20.. 2023. 11. 27.
[PROGRAMMERS] Lv.3 조건에 맞는 사용자 정보 조회하기=> String, Date 문제 USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요. 풀이 논리 과정 "게시물을 3건 이상 등록" : 등록이기 때문에 USED_GOODS_BOARD 테이블의 STATUS 컬럼 값에 관계없이 WRITER_ID 값을 3번 이상 가지고 있는 유저를 찾으면 됨. "중고 거래 게시물": 게시물과 관련된 컬럼은 USED_GOODS_BOARD 테.. 2023. 11. 24.
[PROGRAMMERS] Lv.3 오랜 기간 보호한 동물(2) => String, Date 문제 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다. 풀이 논리 과정 "보호 기간이 가장 길었던" : 입양일과 보호 시작일의 차이를 구해야함. -> 두 차이를 구하기 위해서는 테이블 ANIMAL_INS과 테이블 ANIMAL_OUTS을 JOIN 해야 함. -> 차이에 대한 결과에 Mapping 되는 아이디와 이름을 출력해야 하기 때문에 JOIN TABLE과 ANIMAL_INS를 다시 한 번 JOIN함. -> "두 마리" : LIMIT을 통해 상위 2개의 행을 출력 풀이 SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I JOIN ( SELECT I.ANIMAL_.. 2023. 11. 24.
[PROGRAMMERS] Lv.3 오랜 기간 보호한 동물(1) => JOIN 문제 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다. 풀이 SELECT I.NAME, I.DATETIME FROM ANIMAL_INS I left join ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL ORDER BY I.DATETIME LIMIT 3 LEFT JOIN 왼쪽 테이블의 모든 레코드를 포함하고, 오른쪽 테이블과 일치하는 레코드가 있는 경우에는 해당 레코드를 포함하며, 없는 경우에는 NULL 값을 사용하여 채운다. LEFT JOIN과 IS NULL을 함께 사용하는 경우, 일치하지 않는 행을 .. 2023. 11. 24.
[PROGRAMMERS] Lv.2 가격대 별 상품 개수 구하기 => GROUP BY 문제 PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요. 풀이 SELECT CASE WHEN PRICE BETWEEN 0 AND 9999 THEN '0' WHEN PRICE BETWEEN 10000 AND 19999 THEN '10000' WHEN PRICE BETWEEN 20000 AND 29999 THEN '20000' WHEN PRICE BETWEEN 30000 AND 39999 THEN '30000' W.. 2023. 11. 23.
[PROGRAMMERS] Lv.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 => GROUP BY 문제 CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요. 풀이 select CAR_TYPE, COUNT(*) as CARS from CAR_RENTAL_COMPANY_CAR where OPTIONS regexp '통풍시트|열선시트|가죽시트' group by CAR_TYPE order by CAR_TYPE REGEXP는 정규 표현식을 사용하여 문자열을 검색하는 데 사용되는 연산자 기본 사용 방법 SELECT * FROM 테이블 WHERE 열명 REGEXP '패.. 2023. 11. 23.