소피it블로그
[SQL] 프로그래머스 SQL 고득점 Kit - SELECT (MySQL) 본문
https://school.programmers.co.kr/learn/courses/30/parts/17042
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 과일로 만든 아이스크림 고르기
SELECT A.FLAVOR
FROM FIRST_HALF A JOIN ICECREAM_INFO B
ON A.FLAVOR = B.FLAVOR
WHERE A.TOTAL_ORDER > 3000
AND B.INGREDIENT_TYPE LIKE "fruit_based"
ORDER BY A.TOTAL_ORDER DESC
JOIN - ON을 잊지 말자.
2. 12세 이하인 여자 환자 목록 출력하기
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD LIKE 'W'
ORDER BY AGE DESC, PT_NAME ASC
IFNULL 사용방식 익숙해지도록 해야 할듯. IFNULL(TLNO, 'NONE')일 경우 TLNO 값이 null이라면 'NONE'으로 변경하라는 의미이다.
3. 흉부외과 또는 일반외과 의사 목록 출력하기
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC
DATE_FORMAT같은 경우는 외우는 게 마음 편할 것 같다.
4. 3월에 태어난 여성 회원 목록 출력하기
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3
AND TLNO IS NOT NULL
AND GENDER = 'W'
ORDER BY MEMBER_ID
DATE 타입에서 월만 원하는 경우 MONTH(DATE_OF_BIRTH)처럼 해주면 된다.
5. 강원도에 위치한 생산공장 목록 출력하기
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID
- %: 모든 문자를 대표함
- _: 문자 하나를 대표함
- #: 숫자 하나를 대표함
6. 서울에 위치한 식당 목록 출력하기
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS, ROUND(AVG(B.REVIEW_SCORE), 2) SCORE
FROM REST_INFO A
JOIN REST_REVIEW B
ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID
HAVING A.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, A.FAVORITES DESC
ROUND(어쩌고, 2)라고 적으면 소숫점 세 번째 자리에서 반올림해줄 수 있다.
또한 GROUP BY에 대한 조건절로 HAVING절이 온다는 점 또한 기억하기.
7. 인기있는 아이스크림
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID
8. 재구매가 일어난 상품과 회원 리스트 구하기
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC
집계함수가 조건절에 들어갈 때에는 WHERE이 아니라 GROUP BY 이후에 오는 HAVING절에 들어가야 한다.
9. 모든 레코드 조회하기
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
10. 역순 정렬하기
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
11. 오프라인/온라인 판매 데이터 통합하기
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
UNION ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
NULL AS USER_ID처럼 사용할 수 있는지 처음에 몰라서 헤맸다.
12. 아픈 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID
13. 어린 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID
14. 동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
15. 여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC
16. 상위 n개 레코드
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
17. 조건에 맞는 회원수 구하기
SELECT COUNT(*) USERS
FROM USER_INFO
WHERE AGE BETWEEN 20 AND 29
AND YEAR(JOINED) = 2021
'CS > 데이터베이스' 카테고리의 다른 글
[SQL] 프로그래머스 SQL 고득점 Kit -String, Date (MySQL) (0) | 2022.11.04 |
---|---|
[SQL] 프로그래머스 SQL 고득점 Kit -JOIN (MySQL) (0) | 2022.11.04 |
[SQL] 프로그래머스 SQL 고득점 Kit - IS NULL (MySQL) (0) | 2022.11.04 |
[SQL] 프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN (MySQL) (0) | 2022.11.04 |
[SQL] 프로그래머스 SQL 고득점 Kit - GROUP BY (MySQL) (0) | 2022.11.04 |