프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
SELECT * 
  FROM FOOD_PRODUCT
 WHERE PRICE = (SELECT MAX(PRICE) 
                  FROM FOOD_PRODUCT)
;
 
 

🙂 확인 사항

1. FOOD_PRODUCT 테이블

2. 제일 비싼 식품

3. 식품 ID, 이름, 코드, 분류, 가격 조회

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
SELECT *
  FROM FOOD_PRODUCT
 WHERE PRICE = (
     SELECT PRICE
       FROM (
           SELECT PRICE
             FROM FOOD_PRODUCT
         ORDER BY PRICE DESC
       )
      WHERE ROWNUM = 1
);
 
 

- ROWNUM

    - ORDER BY절보다 이전에 실행되므로 정렬 쿼리 작성 후 WHERE 조건절에서 활용

 

1
2
3
4
5
6
  SELECT *
    FROM FOOD_PRODUCT
ORDER BY PRICE DESC
   FETCH FIRST 1 ROWS ONLY
;
 
 

- FETCH FIRST n ROWS ONLY

    -  결과 집합의 처음 n개의 행만 반환하는 방법

    - Oracle 12c부터 사용 가능

 

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
  SELECT ANIMAL_ID, 
         NAME, 
         TO_CHAR(DATETIME'YYYY-MM-DD') 날짜
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 아이디, 이름, 들어온 날짜 조회

3. 아이디 순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
  SELECT ANIMAL_ID, NAME,
         EXTRACT(YEAR FROM DATETIME|| '-' ||
         LPAD(EXTRACT(MONTH FROM DATETIME), 2'0'|| '-' ||
         LPAD(EXTRACT(DAY FROM DATETIME), 2'0') AS "날짜"
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

- LPAD("값", "총 문자길이", "채움문자")

    - 지정한 길이만큼 왼쪽부터 특정문자로 채움

 

1
2
3
4
5
6
7
  SELECT ANIMAL_ID, 
         NAME, 
         TO_CHAR(TO_DATE(SUBSTR(DATETIME0,10), 'DD-MON-RR'), 'YYYY-MM-DD') 날짜
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

- SUBSTR("문자열", "시작위치", "길이")

    - 시작위치 첫 값: 1

    - 시작위치<0: 뒤에서부터 문자열 추출

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

[Oracle] LPAD, RPAD 함수 사용하여 공백 채우기 "0 채우기"

[Oracle] LPAD, RPAD 함수 사용하여 공백 채우기 "0 채우기" 데이터베이스에서 키 값을 자동으로 저장할 때, SEQ는 SEQUENCE를 사용해서 자동증가가 쉽지만 숫자형 문자인 CD00001 과 같은 포맷의 키 값을 1

haenny.tistory.com

 

[Oracle] SUBSTR, SUBSTRB 함수 사용법 (문자열 자르기)

오라클에서 문자열을 자를 때는 SUBSTR 함수를 사용한다. 다른 DB의 SQL 함수인 SUBSTRING, LEFT, RIGHT 함수와 동일한 기능을 하며, 문자열을 바이트 단위로 자를 때는 SUBSTRB 함수를 사용하면 된다. SUBSTR

gent.tistory.com

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
  SELECT TO_CHAR(DATETIME'FMHH24') HOUR, 
         COUNT(*) COUNT
    FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME'FMHH24')
  HAVING TO_CHAR(DATETIME'FMHH24'>= 9 
     AND TO_CHAR(DATETIME'FMHH24'< 20
ORDER BY TO_NUMBER(TO_CHAR(DATETIME'FMHH24'))
;
 
 

🙂 확인 사항

1. ANIMAL_OUTS 테이블

2. 09:00부터 19:59까지,

3. 각 시간대별로 입양이 몇 건이나 발생했는지 조회

4. 시간대 순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
WITH SUB AS (
    SELECT TO_CHAR(DATETIME'FMHH24') HOUR
      FROM ANIMAL_OUTS
     WHERE TO_NUMBER(TO_CHAR(DATETIME'FMHH24')) BETWEEN 9 AND 19
)
  SELECT HOUR, 
         COUNT(HOUR) COUNT
    FROM SUB
GROUP BY HOUR
ORDER BY TO_NUMBER(HOUR)
;
 
 

공통 표현식 사용

 

1
2
3
4
5
6
7
8
9
10
11
12
WITH SUB AS (
      SELECT TO_CHAR(DATETIME'FMHH24') AS HOUR,
             COUNT(*) AS COUNT
        FROM ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME'FMHH24')
)
  SELECT HOUR, COUNT
    FROM SUB
   WHERE HOUR BETWEEN 9 AND 19
ORDER BY TO_NUMBER(HOUR)
;
 
 

공통 표현식 사용

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
  SELECT ANIMAL_TYPE, 
         NVL(NAME, 'No name'),
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 생물 종, 이름, 성별 및 중성화 여부 조회

3. 아이디 순 조회

4. Null 대신 No name 표시

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
  SELECT ANIMAL_TYPE,
         CASE 
            WHEN NAME IS NULL THEN 'No name' 
            ELSE NAME 
        END AS NAME,
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 
 

CASE문 사용

 

1
2
3
4
5
6
  SELECT ANIMAL_TYPE,
         COALESCE(NAME, 'No name') AS NAME,
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 
 

COALESCE 사용

    - COALESCE(column1, column2, column3, 'default_value')

    - 여러 열 또는 표현식 중에서 NULL이 아닌 첫 번째 값을 반환하며, 만약 모든 인수가 NULL이면 지정된 대체 값을 반환

 

1
2
3
4
5
6
  SELECT ANIMAL_TYPE,
         DECODE(NAME, NULL'No name', NAME) AS NAME,
         SEX_UPON_INTAKE
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 
 

DECODE 사용

    - DECODE(expression, search1, result1, search2, result2, ..., default)

    - expression이 search1이면, result1 반환

    - expression이 search2이면, result2 반환

    - 기본값: default

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
11
12
  SELECT ANIMAL_ID, 
         NAME,
         CASE
              WHEN INSTR(SEX_UPON_INTAKE, 'Neutered'> 0 
                OR INSTR(SEX_UPON_INTAKE, 'Spayed'> 0 
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. SEX_UPON_INTAKE 컬럼에 'Neutered' or 'Spayed'

3. 아이디, 이름, 중성화 여부 조회

4. 아이디 순 조회

5. 중성화 O, X 표시

 

- INSTR: 문자열에서 문자를 찾으면 문자의 시작 위치를 반환

(Oracle은 첫번째 위치가 0이 아닌 1이므로 0보다 클 경우, 해당 글자가 있는 것)

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
  SELECT ANIMAL_ID, NAME,
         CASE
              WHEN REGEXP_LIKE(SEX_UPON_INTAKE, 'Neutered')
                OR REGEXP_LIKE(SEX_UPON_INTAKE, 'Spayed')
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

정규 표현식 사용

 

1
2
3
4
5
6
7
8
9
10
11
  SELECT ANIMAL_ID, NAME,
         CASE
              WHEN SEX_UPON_INTAKE LIKE '%Neutered%' 
              OR SEX_UPON_INTAKE LIKE '%Spayed%' 
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

Like 연산자 사용

 

 

 

🔗 소스 코드
GitHub