💻 Programs & Tools/SQL

[SQL/프로그래머스] SQL 고득점 Kit SELECT (LEVEL 1) 풀이

민이언즈 2023. 8. 8. 21:21

Python과 R은 나름 능숙하게 잘 쓰지만

SQL은 잘 다뤄보질 않아서 1일 1문제 이상 코딩테스트 연습으로 감을 기르려고 한다.

(훗날 SQLD + SQLP를 위해..)

 

프로그래머스에 다양한 문제들이 있어서

LEVEL별 문제를 풀고, 메모가 필요한 문제들만 정리 후 인증용으로 포스팅할 계획이다.


 

프로그래머스

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

programmers.co.kr

 

LEVEL 1

1. 강원도에 위치한 생산공장 목록 출력하기

FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '%강원도%'
ORDER BY FACTORY_ID ASC;

  • 참고) LIKE문은 대소문자를 우선순위로 구분함. 예를 들어 th로 검색을 한다면 th, Th, TH 순으로 정렬되어 검색.

 

2. 역순 정렬하기

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC ;
  • 동물 이름, 보호 시작일을 SELECT, ID기준으로 내림차순해주기 

 

3. 여러 기준으로 정렬하기 (△)

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC ;
  • 이름 순으로 조회 → NAME ASC
  • 이름이 같은 동물 중, 보호를 나중에 시작한 동물을 먼저 보여줘야함 → DATE DESC ; 

 

4. 상위 n개 레코드

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC 
LIMIT 1 ;
  • 가장 먼저 들어온 동물 한 마리의 이름을 조회해야하므로, LIMIT 명령어 사용
  • LIMIT :  SQL 쿼리에서 결과의 출력을 제한하는 데 사용되는 구문

 

5. 조건에 맞는 회원수 구하기

USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.

SELECT COUNT(*)
FROM USER_INFO
WHERE JOINED LIKE '2021%'
and AGE between 20 and 29 ;
  • SELECT COUNT :  SQL 쿼리에서 결과의 갯수를 출력하는 명령어
  • LIKE문 외에 between이나 DATE_FORMAT 활용해도 되지 않을까?

 

6. 조건에 맞는 도서 리스트 출력하기 (△)

BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요.

 

주의사항

PUBLISHED_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.

 

 

  • 주의사항에 따라 PUBLISHED_DATE 값이 어떻게 출력되는지 먼저 확인
SELECT *
FROM BOOK 
LIMIT 5 ;

 

Answer

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK 
WHERE DATE_FORMAT(PUBLISHED_DATE, '%Y') = '2021'
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE ASC;
  • DATE_FORMAT() 함수 날짜를 원하는 형식(%Y-%m-%d, 년-월-일)으로 변환
    • 처음 조회한 결과와 문제의 결과에서 date 형식이 다르기 때문에, 먼저 포맷을 일치시켜준다.   
  • 사실 주의사항을 안보고 문제만 읽어서 잘못 코딩함.. 데이터 포맷과 주의사항을 잘 살피자.

(문제 발견 시 댓글 남겨주시면 정정하겠습니다!)

728x90