알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

프로그래머스에 상위 90% ~ 80%대 문제 입니다.


Think🤔

 

복습겸 작은 성취감을 위해 풀어봅니다..


Solution✍

 

가격이 제일 비싼 식품의 정보 출력하기

SELECT * 
from FOOD_PRODUCT
where PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

- 다른 방법으로는 ORDER BY DESC 한 다음 LIMIT 1을 구하는 방법이 있습니다.

SELECT *
FROM FOOD_PRODUCT 
ORDER BY PRICE DESC
FETCH FIRST 1 ROWS ONLY;

-정렬한 후에 첫번째 반환

 

조건에 맞는 회원수 구하기

SELECT COUNT(1) FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%' AND AGE >= 20 AND AGE <= 29;
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE EXTRACT(YEAR FROM JOINED)=2021 AND AGE >= 20 AND AGE <=29

-BETWEEN 으로 사용해도 가능

-TO_CHAR를 이용해서 년도 LIKE로 검색 앞에만 2021년인 것

-연도 추출해서 반환 가능 

 

 

카테고리 별 상품 개수 구하기

SELECT SUBSTR(PRODUCT_CODE,1,2) AS CATEGORY, COUNT(1) 
FROM PRODUCT 
GROUP BY SUBSTR(PRODUCT_CODE,1,2) 
ORDER BY CATEGORY ASC;

- LEFT는 안된다.

 

중성화 여부 파악하기

SELECT ANIMAL_ID
     , NAME
     , CASE 
        WHEN LOWER(SEX_UPON_INTAKE) LIKE '%neutered%' THEN 'O'
        WHEN LOWER(SEX_UPON_INTAKE) LIKE '%spayed%' THEN 'O'
    ELSE 'X'
    END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID , NAME , 중성화;

- LOWER은 안넣어도 상관없음

 

진료과별 총 예약 횟수 출력하기

SELECT MCDP_CD AS "진료과코드" 
      , COUNT(1) AS "5월예약건수"
 FROM APPOINTMENT 
WHERE TO_CHAR(APNT_YMD,'YYYYMM') = 202205
GROUP BY MCDP_CD
ORDER BY "5월예약건수" ASC , "진료과코드" ASC;
SELECT MCDP_CD AS "진료과코드" 
      , COUNT(1) AS "5월예약건수"
 FROM APPOINTMENT 
WHERE TO_CHAR(APNT_YMD,'YYYYMM') = 202205
GROUP BY MCDP_CD
ORDER BY 2 , 1;

 

인기있는 아이스크림

SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC , SHIPMENT_ID

 

12세 이하인 여자 환자 목록 출력하기

SELECT PT_NAME , PT_NO ,GEND_CD,AGE,NVL(TLNO,'NONE') AS TLNO 
FROM PATIENT
WHERE AGE <= 12 
AND GEND_CD = 'W' 
ORDER BY AGE DESC , PT_NAME;

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

SELECT CAR_TYPE , COUNT(1) AS CARS 
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
SELECT CAR_TYPE, COUNT(1) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE REGEXP_LIKE(OPTIONS, '시트', 'i') -- 'c'도 가능 
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;

- 대소문자를 구분해라 c , 상관없다 i 임

 

카테고리 별 도서 판매량 집계하기

SELECT CATEGORY , SUM(SALES) AS TOTAL_SALES
FROM BOOK A JOIN BOOK_SALES B
  ON A.BOOK_ID = B.BOOK_ID
WHERE TO_CHAR(SALES_DATE,'YYYYMM') = 202201
GROUP BY CATEGORY
ORDER BY CATEGORY;

 

상품 별 오프라인 매출 구하기

SELECT A.PRODUCT_CODE , SUM(A.PRICE * B.SALES_AMOUNT) AS SALES 
FROM PRODUCT A INNER JOIN OFFLINE_SALE B
  ON A.PRODUCT_ID = B.PRODUCT_ID
GROUP BY A.PRODUCT_CODE
ORDER BY SALES DESC , A.PRODUCT_CODE ASC;

 - 집계함수를 이용하여 합계 출력


Review🤩

 

오라클에서 정규식을 사용하는 법 , FETCH에 대해서 복습


 

+ Recent posts