ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ORACLE] 매일 5개. 프로그래머스 SQL 문제 풀기 챌린지 Day 12
    Study/SQL 2024. 6. 10. 17:47
    728x90
    반응형

     

     

    오늘부터 새로운 도전을 시작하려고 합니다.

     

    바로 하루 5개씩 SQL 관련 문제를 푸는 것입니다.

     

    매일 프로그래머스에서 제공하는 SQL 문제5개씩 해결하며, 데이터 베이스 관리 및 쿼리 작성 능력을 성장시키고자 합니다.

     

    또한, 오라클(Oracle) 데이터베이스를 사용하여 문제를 해결함으로써, 실제 업무 환경에서 마주칠 수 있는 다양한 상황에 대비하고자 합니다.

     

    매일 바쁜 일상 속에서 새로운 것을 배우고 성장하는 것은 어렵겠지만, 도전이라도 하면 어떨까 합니다.

     

    프로그래머스는 무료로 다양한 난이도의 문제를 제공하기 때문에, 저는 제일 낮은 난이도부터 정답률이 높은 순서대로 풀어 보려고 합니다.

     

     

    프로그래머스 문제 모음

    728x90

     

     


    문제 풀이

    해당 문제에 대한 자세한 내용은 프로그래머스에서 찾아볼 수 있습니다!

     

     

     

    1. 없어진 기록 찾기

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

     

    SELECT o.animal_id, o.name
    from animal_ins i, animal_outs o
    where i.animal_id(+) = o.animal_id and o.datetime is not null and i.datetime is null 
    order by 1

     

     

     

     

    2. 조건에 맞는 사용자 정보 조회하기

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

     

    select a.writer_id, b.nickname, b.city || ' ' || b.street_address1 || ' ' || b.street_address2 as 전체주소, substr(b.tlno,1,3) || '-' || substr(b.tlno,4,4) || '-' || substr(b.tlno,8,4) as 전화번호
    from
        (SELECT a.writer_id
        from USED_GOODS_BOARD a, USED_GOODS_USER b
        where a.writer_id = b.user_id 
        group by a.writer_id
        having count(board_id) >= 3) a, USED_GOODS_USER b
    where a.writer_id = b.user_id
    order by 1 desc

     

    반응형

     

     

    3. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

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

     

    select distinct(car_id),
        case when car_id in 
        (select car_id
        from CAR_RENTAL_COMPANY_RENTAL_HISTORY
        where to_char(start_date, 'yyyy-mm-dd') <= '2022-10-16' 
            and to_char(end_date, 'yyyy-mm-dd') >= '2022-10-16') then '대여중' 
            else '대여 가능' end as availability
    from CAR_RENTAL_COMPANY_RENTAL_HISTORY
    order by 1 desc

     

     

     

     

    4. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

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

     

    select '/home/grep/src/' || b.board_id || '/' || b.file_id || b.file_name || b.file_ext as file_path
    from USED_GOODS_BOARD a, USED_GOODS_FILE b
    where a.board_id = b.board_id and a.views = (SELECT max(views) from used_goods_board) 
    order by b.file_id desc

     

     

     

     

    5. 헤비 유저가 소유한 장소

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

     

    select b.id, b.name, b.host_id
    from(
        SELECT host_id
        from places
        group by host_id 
        having count(host_id) > 1) a, places b
    where a.host_id = b.host_id
    order by 1

     

     

     

    728x90
    반응형

    댓글

Designed by Tistory.