본문 바로가기
PS/SQL

[프로그래머스][SQL] 프로그래머스 SQL 문제 풀이 (1)

by nyrimmm 2024. 6. 4.

1. 상위 n개 레코드

https://school.programmers.co.kr/learn/courses/30/lessons/59405

 

프로그래머스

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

programmers.co.kr

 

Lv.1의 SQL 문제

출력 개수를 제한하기 위해서 LIMIT 을 사용해야 한다.

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

 


 

2. NULL 처리하기

https://school.programmers.co.kr/learn/courses/30/lessons/59410

 

프로그래머스

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

programmers.co.kr

 

Lv.2의 SQL 문제

이름이 없는 NULL인 동물은 IFNULL 함수를 사용해서 'No name'으로 출력한다. 

  • IFNULL(VAL1, VAL2) : VAL1이 null 이면 VAL2값 출력, null이 아니면 VAL1값 출력

이 때, MYSQL 에서는 IFNULL, MSSQL에서는 ISNULL, ORACLE에서는 NVL 이다.

SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 


 

3. 흉부외과 또는 일반외과 의사 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/132203

 

프로그래머스

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

programmers.co.kr

 

Lv.1의 SQL 문제

DATE_FORMAT 함수를 사용해서 DATE 타입의 출력 형식을 지정할 수 있다.

  • DATE_FORMAT(날짜, 형식) : 날짜를 지정한 형식으로 출력
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC;

 


 

4. 자동차 대여 기록에서 장기/단기 대여 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

프로그래머스

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

programmers.co.kr

 

Lv.1의 SQL 문제

DATE_FORMAT 함수를 사용해서 START_DATE와 END_DATE의 출력 형식을 지정해준다.

두 날짜간의 차이를 계산해주는 DATEDIFF 함수를 사용해서 자동차 대여 기간을 구하고,

IF 함수로 '장기대여', '단기대여' 를 구분하여 REN_TYPE을 출력한다.

  • DATEDIFF(end-date, start-date) : 두 날짜 간의 차이를 계산해서 출력
SELECT HISTORY_ID, 
	CAR_ID, 
        DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE, 
        DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE, 
        IF(DATEDIFF(END_DATE, START_DATE) + 1 >= 30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;

 


 

5. 조건에 부합하는 중고거래 댓글 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/164673

 

프로그래머스

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

programmers.co.kr

 

Lv.1의 SQL 문제

두 테이블을 INNER JOIN해서 2022년 10월에 작성된 게시글에 대한 정보를 출력한다.

SELECT B.TITLE, 
	B.BOARD_ID, 
        R.REPLY_ID, 
        R.WRITER_ID, 
        R.CONTENTS, 
        DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD B JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;

 


 

6. 잡은 물고기 중 가장 큰 물고기의 길이 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/298515

 

프로그래머스

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

programmers.co.kr

 

Lv.1의 SQL 문제

CONCAT 함수를 사용하여 가장 큰 물고기의 길이(MAX(LENGTH))와 'cm'를 붙여서 출력한다.

  • CONCAT(문자열1, 문자열2, 문자열3, ...) : 둘 이상의 문자열을 입력 순서대로 합쳐서 출력
SELECT CONCAT(MAX(LENGTH), 'cm') AS MAX_LENGTH
FROM FISH_INFO

 


 

7. 가격대 별 상품 개수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/131530

 

프로그래머스

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

programmers.co.kr

 

Lv. 2의 SQL 문제

TRUNCATE 함수로 만원 단위의 가격대를 구한 후, 가격대별로 그룹화하여 상품 개수를 출력한다.

  • TRUNCATE(숫자, 버릴 자릿수) : 숫자를 버릴 자릿수 이하로 버림. 버릴 자릿수를 반드시 입력해야 한다.

 

SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY TRUNCATE(PRICE, -4)
ORDER BY PRICE_GROUP;