프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🙂 확인 사항

1. ANIMAL_INS, ANIMAL_OUTS 테이블

2. 입양을 간 동물

3. 보호 기간이 가장 길었던 동물 2마리

4. 아이디, 이름 조회

5. 보호기간 내림차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
   SELECT AO.ANIMAL_ID, AO.NAME
     FROM ANIMAL_INS AI
LEFT JOIN ANIMAL_OUTS AO
       ON AI.ANIMAL_ID=AO.ANIMAL_ID
    WHERE AO.ANIMAL_ID IS NOT NULL
 ORDER BY (AO.DATETIME - AI.DATETIME) DESC
    FETCH FIRST 2 ROWS ONLY
;
 
 

* Left Join

    - Full Join: Animal_ins에 포함되지 않은 Animal_outs 값이 도출될 수 있음

 

1
2
3
4
5
6
7
8
9
10
11
12
SELECT * 
  FROM (
     SELECT AO.ANIMAL_ID, AO.NAME
       FROM ANIMAL_INS AI
  LEFT JOIN ANIMAL_OUTS AO
         ON AI.ANIMAL_ID=AO.ANIMAL_ID
      WHERE AO.ANIMAL_ID IS NOT NULL
   ORDER BY (AO.DATETIME - AI.DATETIME) DESC
)
 WHERE ROWNUM <= 2
 ;
 
 

Inline View

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🙂 확인 사항

1. USED_GOODS_BOARD 테이블

2. 2022년 10월 5일 등록된

3. 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회

4. 거래 상태별 출력 문구 지정

5. 게시글 ID 내림차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  SELECT BOARD_ID, 
         WRITER_ID, 
         TITLE, 
         PRICE,
         CASE
            WHEN STATUS = 'SALE' THEN '판매중'
            WHEN STATUS = 'RESERVED' THEN '예약중'
            WHEN STATUS = 'DONE' THEN '거래완료'
         END STATUS
    FROM USED_GOODS_BOARD
   WHERE CREATED_DATE = DATE '2022-10-05'
ORDER BY BOARD_ID DESC
;
 
 

Case 조건문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT BOARD_ID, 
       WRITER_ID, 
       TITLE, 
       PRICE,
       DECODE(STATUS, 
              'SALE''판매중',
              'RESERVED''예약중',
              'DONE''거래완료') STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = DATE '2022-10-05'
ORDER BY BOARD_ID DESC
;
 
 

Decode 조건문

 

- DECODE(STATUS, 'SALE', '판매중', 'RESERVED', '예약중', 'DONE', '거래완료')

    - STATUS 컬럼에 대해

    - SALE이라면, 판매중 출력

    - RESERVED라면, 예약중 출력

    - DONE이라면, 거래완료 출력

    - 초기값 설정도 가능하나, 생략 가능

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

[Oracle] 오라클 DECODE 함수 사용방법 (if else, 디코드)

DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다. 표준 SQL 함수가 아니라서 사용을 꺼려하기도 하지만 잘 사용하면 아주 편하기 때문에 유용하다. 최근에는 CASE WHEN 구문 사용

gent.tistory.com

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🙂 확인 사항

1. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블

2. 평균 대여 기간이 7일 이상

3. 자동차 ID, 평균 대여기간

4. 평균 대여 기간 컬럼명: AVERAGE_DURATION

5. 평균 대여 기간: 소수점 두번째 자리에서 반올림

6. 평균 대여 기간 내림차순, 자동차 ID 내림차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
  SELECT CAR_ID, 
         ROUND(AVG((END_DATE-START_DATE+1)),1) AVERAGE_DURATION
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
  HAVING ROUND(AVG((END_DATE-START_DATE+1)),1)>=7
ORDER BY ROUND(AVG((END_DATE-START_DATE+1)),1) DESC, 
         CAR_ID DESC
;
 
 

GROUPG BY + HAVING

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH AVGTABLE AS(
      SELECT CAR_ID,
             ROUND(AVG((END_DATE-START_DATE+1)),1) AVERAGE_DURATION
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    GROUP BY CAR_ID
)
  SELECT CAR_ID, 
         AVERAGE_DURATION
    FROM AVGTABLE
   WHERE AVERAGE_DURATION>=7
ORDER BY AVERAGE_DURATION DESC, 
         CAR_ID DESC
;
 
 

공통 표현식

 

1
2
3
4
5
6
7
8
9
10
11
12
13
  SELECT CAR_ID, 
         AVERAGE_DURATION
    FROM (
        SELECT CAR_ID,
               ROUND(AVG(END_DATE - START_DATE + 1), 1) AS AVERAGE_DURATION
          FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
      GROUP BY CAR_ID
    ) 
   WHERE AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, 
         CAR_ID DESC
;
 
 

인라인 뷰

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🙂 확인 사항

1. ANIMAL_INS, ANIMAL_OUTS 테이블

2. 아직 입양을 못 간 동물

3. 가장 오래 보호소에 있었던 동물

4. 3마리

5. 이름과 보호 시작일 조회

6. 보호 시작일 기준 오름차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT * 
  FROM (
        SELECT NAME, 
               DATETIME
          FROM ANIMAL_INS
         WHERE ANIMAL_ID NOT IN (
                                SELECT ANIMAL_ID 
                                  FROM ANIMAL_OUTS
                             )
      ORDER BY DATETIME
  )
 WHERE ROWNUM<=3
;
 
 

1. NOT IN

    - ANIMAL_OUTS에 없는 ANIMAL_ID 조회

2. ROWNUM

    - ORACLE 내장 가상 컬럼으로 RECORD의 SEQ 부여

    - WHERE가 ORDER보다 실행순서가 빠르므로 INLINE VIEW 활용

 

1
2
3
4
5
6
7
8
9
10
   SELECT AI.NAME, 
          AI.DATETIME
     FROM ANIMAL_INS AI
LEFT JOIN ANIMAL_OUTS AO
       ON AI.ANIMAL_ID = AO.ANIMAL_ID
    WHERE AO.ANIMAL_ID IS NULL
 ORDER BY AI.DATETIME
    FETCH FIRST 3 ROWS ONLY
;
 
 

1. LEFT JOIN + IS NULL

    - ANIMAL_OUTS가 NULL 값 조회

2. FETCH FIRST

    - ORACLE 12C부터 사용 가능

 

* FETCH FIRST

    - 주로 Oracle, PostgreSQL, IBM Db2, Apache Derby와 같은 데이터베이스 시스템에서 지원

* FETCH NEXT

    - 주로 SQL Server, Sybase, MySQL와 같은 데이터베이스 시스템에서 지원

 

지원하는 DB에 따라 구문 변경 유의

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🙂 확인 사항

1. CAR_RENTAL_COMPANY_CAR 테이블

2. '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함

3. 자동차 종류 별

4. 몇 대

5. 자동차 수 컬럼명 CARS

6. 자동차 종류 기준 오름차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
10
  SELECT CAR_TYPE, 
         COUNT(*) CARS 
    FROM CAR_RENTAL_COMPANY_CAR
   WHERE OPTIONS LIKE '%통풍시트%' 
      OR OPTIONS LIKE '%열선시트%' 
      OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
;
 
 

* OR 조건문

🚨 IN 조건문 사용 시, 정확하게 일치하는 자동차만 반환

 

1
2
3
4
5
6
7
8
  SELECT CAR_TYPE, 
         COUNT(*) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
   WHERE REGEXP_LIKE(OPTIONS, '통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
;
 
 

* 정규 표현식 사용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT CAR_TYPE,
       COUNT(*) AS CARS
  FROM CAR_RENTAL_COMPANY_CAR
 WHERE CASE
         WHEN OPTIONS LIKE '%통풍시트%' THEN 1
         WHEN OPTIONS LIKE '%열선시트%' THEN 1
         WHEN OPTIONS LIKE '%가죽시트%' THEN 1
         ELSE 0
       END = 1
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
;
 
 

* CASE 조건문 사용

 

 

 

🔗 소스 코드
GitHub