[MySQL] 프로그래머스 Lv.1
문제
1. 역순 정렬하기
코딩테스트 연습 - 역순 정렬하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
- 단순 이름, 날짜 데이터 추출해서 정렬기준 column 정해주기.
2. 상위 n개 레코드
코딩테스트 연습 - 상위 n개 레코드 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
- 정렬 기준도 알고있고, 가장 단순하게 상위 데이터를 뽑는 LIMIT
3. 이름이 있는 동물의 아이디
코딩테스트 연습 - 이름이 있는 동물의 아이디 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID
- NULL 사용법. NAME column에 NULLABE이 TRUE이다.
- IS NOT NULL로 NULL값을 체크해준다.
4. 동물의 아이디와 이름
코딩테스트 연습 - 동물의 아이디와 이름 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
- 그냥 FROM SELECT문
5. 여러 기준으로 정렬하기
코딩테스트 연습 - 여러 기준으로 정렬하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC
- 디폴트는 ASC, 역순 정렬할거면 DESC
6. 어린 동물 찾기
코딩테스트 연습 - 어린 동물 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS AS A
WHERE A.INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
- INTAKE CONDITION보면 aged가 있다. 부정형은 !=
7. 아픈 동물 찾기
코딩테스트 연습 - 아픈 동물 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;
- INTAKE COND가 SICK인 DATA 추출.
8. 나이 정보가 없는 회원 수 구하기
코딩테스트 연습 - 나이 정보가 없는 회원 수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT COUNT(*)
FROM USER_INFO
WHERE AGE IS NULL;
- COUNT(*) AGE가 NULL이 아닌 모든 데이터를 COUNT
- *는 NULL도 세는 구문, 그냥 COLUMN은 NULL을 세지 않는 구문
9. 가장 비싼 상품 구하기
코딩테스트 연습 - 가장 비싼 상품 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT PRICE AS MAX_PRICE
FROM PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
- 최대,최소 -> 정렬 후 LIMIT로 조회
10. 강원도에 위치한 생산공장 목록 출력하기
코딩테스트 연습 - 강원도에 위치한 생산공장 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE LEFT(ADDRESS,3) = '강원도'
ORDER BY FACTORY_ID;
- LEFT, RIGHT, MID : 부분 문자열 출력.
- 왼쪽부터 x개, 오른쪽부터 x개, x번째부터 y개
11. 강원도에 위치한 식품공장 목록 출력하기
코딩테스트 연습 - 경기도에 위치한 식품창고 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN,'N')
FROM FOOD_WAREHOUSE
WHERE LEFT(ADDRESS,3) = '경기도'
ORDER BY WAREHOUSE_ID
- COALESCE 인자가 2개인 경우 : col이 Null인 경우 -> 입력 값 반환
- COALESCE에서 인자가 3개 이상인 경우 : Null이 아닌 가장 빠른 값을 출력한다. 모두 Null이면 Null 반환
12. 흉부외과 또는 일반외과 의사 목록 출력하기
코딩테스트 연습 - 흉부외과 또는 일반외과 의사 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT DR_NAME, DR_ID, MCDP_CD, LEFT(HIRE_YMD,10) AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME;
- 의사 코드 추출해서 새 col로 할당해주기. 단순 where, order 문제
13. 이름이 없는 동물의 아이디
코딩테스트 연습 - 이름이 없는 동물의 아이디 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;
- Null은 IS NULL, IS NOT NULL로 판단
14. 조건에 맞는 회원 수 구하기
코딩테스트 연습 - 조건에 맞는 회원수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE LEFT(JOINED,4) = '2021' AND AGE >= 20 AND AGE < 30;
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED) = 2021 AND AGE BETWEEN 20 AND 29;
- 위에 코드보다는 아래 코드가 조금 더 직관적인듯
- JOINED라는 컬럼이 DATA TYPE인거를 쿼리만 봐도 알 수 있다.
- BETWEEN은 닫힌구간
15. 인기있는 아이스크림
코딩테스트 연습 - 인기있는 아이스크림 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
- 다중정렬 순서대로.
16. 12세 이하인 여자 환자 목록 출력하기
코딩테스트 연습 - 12세 이하인 여자 환자 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO,'NONE')
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME
- 전화번호 TLNO 없으면 NONE
- 나머지는 WHERE / ORDER 쿼리
17. 조건에 맞는 도서 리스트 출력하기
코딩테스트 연습 - 조건에 맞는 도서 리스트 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE) = 2021 AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;
- DATE에서는 YEAR, MONTH 등으로 추출하는게 쿼리에서 보기 편하다.
- YYYY-MM-DD는 %Y-%m-%로
18. 평균 일일 대여 요금 구하기
코딩테스트 연습 - 평균 일일 대여 요금 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
- ROUND, TRUNCATE : 반올림, 내림
19. 모든 레코드 조회하기
코딩테스트 연습 - 모든 레코드 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT * FROM ANIMAL_INS;
SELECT
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS;
- 과거의 나는 무슨 생각으로 푼걸까...
- SELECT * : 모든 레코드
20. 과일로 만든 아이스크림 고르기
코딩테스트 연습 - 과일로 만든 아이스크림 고르기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT A.FLAVOR
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B ON A.FLAVOR = B.FLAVOR
WHERE A.TOTAL_ORDER > 3000 AND B.INGREDIENT_TYPE = 'fruit_based'
ORDER BY A.TOTAL_ORDER DESC;
- 테이블 A,B를 조인할 때, 조인하는 컬럼이 B의 기본키이다.
- 어찌됐건, 조건을 TABLE A에서, B에서 한 번씩 걸어주고 ORDER BY로 정렬해준다.
21. 최댓값 구하기
코딩테스트 연습 - 최댓값 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT DATETIME AS 시간
FROM ANIMAL_INS
ORDER BY DATETIME DESC
LIMIT 1;
- ORDER BY COL 정렬기준 + LIMIT 조회 레코드 수
22. 특정 옵션이 포함된 자동차 리스트 구하기
코딩테스트 연습 - 특정 옵션이 포함된 자동차 리스트 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC;
- 특정 단어로 시작 'X%'
- 특정 단어로 끝 '%X'
- 특정 단어 포함 '%X%'
- %가 나머지 단어들로 치환된다고 생각하면 된다.
23. 자동차 대여 기록에서 장기/단기 대여 구분하기
코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨 (programmers.co.kr)
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) >= 29, '장기 대여','단기 대여') AS RENTAL_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE YEAR(START_DATE) = 2022 AND MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC;
- TIMEDIFF 이용, 끝값 - 시작값이다.
- 이 문제에서는 동일 날짜 로그가 남으면 1일로 처리되므로 29로 해야한다.
- 날짜 문제에서 잘 생각하고 풀이
24. 조건에 부합하는 중고거래 댓글 조회하기
코딩테스트 연습 - 조건에 부합하는 중고거래 댓글 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)
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 AS B
JOIN USED_GOODS_REPLY AS R ON B.BOARD_ID = R.BOARD_ID
WHERE YEAR(B.CREATED_DATE) = 2022 AND MONTH(B.CREATED_DATE) = 10 AND R.BOARD_ID = B.BOARD_ID
ORDER BY R.CREATED_DATE, B.TITLE;
- 조인. 두 개의 테이블이 나오니까, AS로 별칭 달아줘서 간편하게 하자. 한 번 바꾸면 항상 붙여야함.
- 게시글 ID 컬럼이 겹치니까 그 컬럼을 기준으로 JOIN을 진행
25. Python 개발자 찾기
코딩테스트 연습 - Python 개발자 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT ID,EMAIL,FIRST_NAME,LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'
ORDER BY 1
- 그냥 where + or, 정렬 컬럼 숫자로 지정
코멘트
기본 문법 + 내장함수 다루기.
24는 난이도 올려도 되지 않을까.... 흠...
'Data Analysis > Query' 카테고리의 다른 글
[MySQL] 프로그래머스 Lv.4 Lv.5 (0) | 2024.03.04 |
---|---|
[MySQL] 프로그래머스 Lv.3 (0) | 2024.01.11 |
[MySQL] 프로그래머스 Lv.2 (0) | 2024.01.08 |
[MySQL] 프로그래머스 : 강원도에 위치한 생산공장 목록 출력하기 (Lv1) (0) | 2023.09.26 |
[MySQL] 프로그래머스 : 상위 n개 레코드 (Lv.1) (0) | 2023.09.26 |
[MySQL] 프로그래머스 : 과일로 만든 아이스크림 고르기 (Lv.1) (0) | 2023.09.26 |
[MySQL] 프로그래머스 : 모든 레코드 조회하기 (Lv.1) (0) | 2023.09.26 |
댓글