풀면서 계속 추가하는 중
1. 과일로 만든 아이스크림 고르기
https://school.programmers.co.kr/learn/courses/30/lessons/133025

- 주문량, 주성분 데이터가 나뉘어짐 → 조인 필요, 필드명 동일하므로 USING 사용
- 주문량, 주성분 타입 조건 필요 → WHERER
- 주문량 순으로 내림차순 정렬 → ORDER BY DESC
SELECT FLAVOR
FROM FIRST_HALF JOIN ICECREAM_INFO
USING (FLAVOR)
WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC;
2. 평균 일일 대여 요금 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/151136

- 별칭 필요 → AS
- 평균값, 반올림 → AVG, ROUND(값, 반올림 결과 자리수)
- 차 종류 조건 필요 → WHERE
SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
3. 흉부외과 또는 일반외과 의사 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/132203


- 진료과 조건 필요 → WHERE IN (값)
- 고용일자 날짜 포맷 → DATE_FORMAT(칼럼명, "%Y-%m-%d)
- 정렬 여러개 → ORDER BY 기준1, 기준2
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/131112

- 공장 위치에 강원도 포함 조건 필요 → WHERE ADDRESS LIKE "강원도%"
- 정규표현식 사용 가능 → WHERE ADDRESS REGEXP "^강원도"
- 정렬 필요 → ORDER BY ASC
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE "강원도%"
ORDER BY FACTORY_ID ASC;
5. 12세 이하인 여자 환자 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/132201

- 환자 성별, 나이 조건 필요 → WHERE
- 전화번호 NULL 처리
- COALESCE(칼럼명, 일치하는 값, 대체할 값): 모든 DBMS에서 사용 가능
- IFNULL(칼럼명, 대체할 값): MySQL에서만 사용 가능
- https://likenow.tistory.com/55
- 나이, 환자이름 다중 정렬 → ORDER BY 조건1, 조건2
-- SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, "NONE") AS TLNO
SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, NULL, "NONE") AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;
6. 인기있는 아이스크림
https://school.programmers.co.kr/learn/courses/30/lessons/133024

- 총주문량, 출하번호 기준 정렬 → ORDER BY 조건1, 조건2
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC
7. 조건에 맞는 도서 리스트 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/144853

- 출판일 조건 필요 → WHERE A LIKE "2021%"
- 카테고리 인문 조건 → WHERE
- 출판일 기준 오름차순 → ORDER BY 출판일 ASC
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d") AS PUBLISHED_DATE
FROM BOOK
WHERE CATEGORY = '인문' AND PUBLISHED_DATE LIKE "2021%"
ORDER BY PUBLISHED_DATE ASC
8. 조건에 부합하는 중고거래 댓글 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164673


- 두 테이블 BOARD_ID 기준으로 조인 필요 → A JOIN B USING (BOARD_ID)
- 게시글 작성일 기준 조건 필요 → B.CREATED_DATE BETWEEN 시작 AND 끝
- 댓글 작성일, 게시글 제목 기준 오름차순 정렬 → ORDER BY 조건1 ASC, 조건2 ASC
SELECT TITLE, BOARD_ID, 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
USING (BOARD_ID)
WHERE B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY R.CREATED_DATE ASC, TITLE ASC
9. 모든 레코드 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/59034

- 모든 레코드 조회 → *
- 정렬 조건 → ORDER BY 조건 ASC
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
10. 역순 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/59035

- 역순 정렬 조건 → ORDER BY 조건 DESC
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
11. 3월에 태어난 여성 회원 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131120

- NULL 제외 → IS NOT NULL
- 생일 패턴 3월 → LIKE '%-%03%'
- YYYY-MM-DD 출력 → DATE_FORMAT(MEMBER_PROFILE.DATE_OF_BIRTH, '%Y-%m-%d')
- +) 만약 YY-MM-DD 형식이라면 '%y-%m-%d'
- Y = 2025 4자리 년도 표현, M = March 달 이름으로 표현, D = 16th 서수로 표현
12. 아픈 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59036

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;
13. 어린 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59037

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
14. 재구매가 일어난 상품과 회원 리스트 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131536

- 회원ID, 상품ID 기준으로 묶기 → GROUP BY USER_ID, PRODUCT_ID
- 중복 데이터가 2개 이상인지 확인 → HAVING COUNT(*) >=2
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;
15. 상위 n개 레코드
https://school.programmers.co.kr/learn/courses/30/lessons/59405

- 들어온 날짜 기준으로 정렬 → ORDER BY
- 상위 1개만 출력 → LIMIT 1
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
16. 조건에 맞는 회원수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131535

- 2021년에 가입
- JOINED LIKE '2021%'
- YEAR(JOINED) = 2021
- 나이 조건
- AGE >= 20 AND AGE <=29
- AGE BETWEEN 20 AND 29
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
AND AGE BETWEEN 20 AND 29;
17. 서울에 위치한 식당 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131118


- 두 테이블 REST_ID 기준으로 조인
- 평점 AVG 사용, 소수점 세번째에서 반올림 ROUND(대상, 2)
- 리뷰 테이블에서 REST_ID 기준으로 그룹화 (리뷰 평점 구해야됨)
- 내림차순 정렬 DESC
SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
ROUND(AVG(R.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO AS I
JOIN REST_REVIEW AS R ON I.REST_ID = R.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY R.REST_ID
ORDER BY SCORE DESC, I.FAVORITES DESC;
18. 업그레이드 된 아이템 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/273711

조회는 자식 아이템 기준으로, 조건은 부모 아이템 기준으로 해야함
1. TREE와 INFO를 ITEM_ID 기준으로 조인하기
2. 조인한 값의 부모가 RARITY = 'RARE'를 만족해야함
- 서브 쿼리로 RARE 한 아이템의 아이디만 구하고
- 부모 아이템 아이디가 그에 속하는지 확인
SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_INFO I
JOIN ITEM_TREE T ON T.ITEM_ID = I.ITEM_ID
WHERE T.PARENT_ITEM_ID IN
(SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE')
ORDER BY I.ITEM_ID DESC;
19. Python 개발자 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/276013

- SKILL_1, SKILL_2, SKILL_3 칼럼에 Python 값이 포함되어 있는지 확인
- → IN 사용
- OR로 조건문 써도 됨
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE 'Python' IN (SKILL_1, SKILL_2, SKILL_3)
ORDER BY ID;'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [PG / C++] 프로그래머스 단어 변환 (1) | 2025.05.26 |
|---|---|
| [PG / C++] 프로그래머스 스티커 모으기 (2) (0) | 2025.03.20 |
| [PG / C++] 프로그래머스 가장 큰 수 (0) | 2025.02.18 |
| [PG / C++] 프로그래머스 등굣길 (0) | 2025.02.15 |
| [PG / C++] 프로그래머스 베스트앨범 (0) | 2025.02.13 |