프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE 
  FROM CAR_RENTAL_COMPANY_CAR 
 WHERE CAR_TYPE='SUV';
 
 

🙂 확인 사항

1. CAR_RENTAL_COMPANY_CAR  테이블

2. 자동차 종류가 SUV

3. 평균 일일 대여 요금 조회

4. 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림

5. 평균 일일 대여 요금의 컬럼명은 AVERAGE_FEE로 지정

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
  SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'yyyy-mm-dd') PUBLISHED_DATE 
    FROM BOOK 
   WHERE EXTRACT(YEAR FROM CAST (PUBLISHED_DATE AS DATE))=2021 
     AND CATEGORY='인문' 
ORDER BY PUBLISHED_DATE;
 
 

🙂 확인 사항

1. BOOK 테이블

2. 2021년에 출판

3. 인문 카테고리

4. 도서 ID, 출판일 조회

5. 출판일 기준 오름차순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
  SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'yyyy-mm-dd') PUBLISHED_DATE 
    FROM BOOK 
   WHERE EXTRACT(YEAR FROM PUBLISHED_DATE)=2021 
     AND CATEGORY='인문' 
ORDER BY PUBLISHED_DATE;
 
 

CAST 구문 삭제

 

1
2
3
4
5
6
  SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'yyyy-mm-dd') PUBLISHED_DATE 
    FROM BOOK 
   WHERE TO_CHAR(PUBLISHED_DATE, 'yyyy')=2021 
     AND CATEGORY='인문' 
ORDER BY PUBLISHED_DATE;
 
 

TO_CHAR 사용

 

⭐TO_CHAR을 사용할 경우, DATE → 문자열로 변환하므로 추가적인 연산이 필요

그러므로, 성능성 EXTRACT를 사용하여 YEAR를 추출하는 것이 더 좋음

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
   SELECT FLAVOR
     FROM FIRST_HALF 
    WHERE FLAVOR IN (
                      SELECT FLAVOR 
                        FROM ICECREAM_INFO 
                       WHERE INGREDIENT_TYPE = 'fruit_based'
    )
     AND TOTAL_ORDER > 3000
ORDER BY TOTAL_ORDER DESC;
 
 

🙂 확인 사항

1. FIRST_HALF 테이블

2. 상반기 아이스크림 총주문량이 3,000보다 높으면서

3. 아이스크림 주 성분이 과일인

4. 아이스크림의 맛을 조회

5. 총주문량 기준 내림차순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
  SELECT FH.FLAVOR
    FROM FIRST_HALF FH 
         JOIN ICECREAM_INFO II 
         ON FH.FLAVOR = II.FLAVOR
   WHERE II.INGREDIENT_TYPE = 'fruit_based'
    AND FH.TOTAL_ORDER > 3000
ORDER BY FH.TOTAL_ORDER DESC
;
 
 

Inner Join 활용

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
  SELECT FLAVOR 
    FROM FIRST_HALF 
ORDER BY TOTAL_ORDER DESC, 
        SHIPMENT_ID ASC;
 
 

🙂 확인 사항

1. FIRST_HALF 테이블

2. 아이스크림의 맛 조회

3. 총주문량 기준 내림차순 → 출하 번호 기준 오름차순 정렬

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
  SELECT DR_NAME, 
         DR_ID, 
         MCDP_CD, 
         TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') HIRE_YMD
    FROM DOCTOR
   WHERE MCDP_CD = 'CS' 
      OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, 
         DR_NAME;
 
 

🙂 확인 사항

1. DOCTOR 테이블

2. 진료과가 흉부외과거나 일반외과

3. 의사 이름, 의사 ID, 진료과, 고용일자 조회

4. 고용일자 기준 내림차순 → 이름 기준 오름차순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
  SELECT DR_NAME, 
         DR_ID, 
         MCDP_CD, 
         TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') HIRE_YMD
    FROM DOCTOR
   WHERE MCDP_CD IN ('CS''GS'
ORDER BY HIRE_YMD DESC, 
         DR_NAME;
 
 

 

⭐ OR 보다는 IN을 사용
1. IN은 서비쿼리를 사용하여 보다 유연한 확장이 가능
2. IN은 반드시 하나의 컬럼이 비교되어야 하므로 나중에 인덱스 구성에 대한 전략을 수립할 때 유리
3. 옵티마이저는 복잡한 OR에 매우 취약

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

1. 논리합(OR, IN) 연산자의 이해 - [종료]대용량 데이터베이스 스터디 - 개발자, DBA가 함께 만들어

Added by 이신재, last edited by study.gurubee on 7월 18, 2011 AND vs. OR(IN) 엑세스 처리방법(OR는 분리), 처리범위(OR는 증가)에 있어 AND와 OR는 매우 큰 차이를 가진다. 이 장에서는 OR(IN)연산자의 정확한 활용방

wiki.gurubee.net