Level 1
과일로 만든 아이스크림 고르기
아이스크림의 총 주문량은 FIRST_HALF 테이블에 있고, 아이스크림의 주 성분은 ICECREAM_INFO 테이블에 있으므로 INNER JOIN을 통해 각 테이블의 FLAVOR 정보가 같은 것들만 묶어준다.
총 주문량이 3000을 넘어가고 주 성분이 과일인 아이스크림을 찾아야 하므로 WHERE을 통해 조건식을 세워준다.
마지막으로 총 주문량을 내림차순으로 정렬하고 조건을 만족하는 모든 아이스크림의 맛을 출력해준다.
SELECT A.FLAVOR
FROM FIRST_HALF A
INNER JOIN ICECREAM_INFO B ON (A.FLAVOR = B.FLAVOR)
WHERE (A.TOTAL_ORDER > 3000) AND (B.INGREDIENT_TYPE = 'fruit_based')
ORDER BY A.TOTAL_ORDER DESC
12세 이하인 여자 환자 목록 출력하기
12세 이하(AGE <= 12)인 여자 환자(GEND_CD = 'W')를 찾으면 된다.
근데 전화번호가 NULL이면 NONE으로 출력하라고 되어 있다.
IFNULL을 통해 TLNO가 NULL일 시 NONE으로 출력하게 한다.
마지막으로 나이를 기준으로 내림차순 출력하고, 나이가 같다면 이름을 기준으로 오름차순해준다.
그리고 환자의 이름, 번호, 성별, 나이, 전화번호를 출력한다.
SELECT A.PT_NAME, A.PT_NO, A.GEND_CD, A.AGE, IFNULL(A.TLNO, 'NONE') AS TLNO
FROM PATIENT A
WHERE (A.AGE <= 12) AND (A.GEND_CD = 'W')
ORDER BY A.AGE DESC, A.PT_NAME ASC
흉부외과 또는 일반외과 의사 목록 출력하기
날짜를 표기할 때, DATE_FORMAT을 사용한다.
이 때 2023-04-06으로 표기하고 싶다면 '%Y-%m-%d'를 사용하고, 23-04-06은 '%y-%m-%d'를 사용해준다.
SELECT A.DR_NAME, A.DR_ID, A.MCDP_CD, DATE_FORMAT(A.HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR A
WHERE (A.MCDP_CD = 'CS') OR (A.MCDP_CD = 'GS')
ORDER BY A.HIRE_YMD DESC, A.DR_NAME ASC
평균 일일 대여 요금 구하기
일일 대여 요금의 평균을 구하려면 AVG를, 소수점 첫째 자리에서 반올림하려면 ROUND를 사용한다.
SELECT ROUND(AVG(A.DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR A
WHERE (A.CAR_TYPE = 'SUV')
인기있는 아이스크림
SELECT A.FLAVOR FROM FIRST_HALF A
ORDER BY A.TOTAL_ORDER DESC, SHIPMENT_ID ASC
조건에 부합하는 중고거래 댓글 조회하기
SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS,
DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD A
INNER JOIN USED_GOODS_REPLY B ON (A.BOARD_ID = B.BOARD_ID)
WHERE YEAR(A.CREATED_DATE) = 2022 AND MONTH(A.CREATED_DATE) = 10
ORDER BY B.CREATED_DATE ASC, A.TITLE ASC
조건에 맞는 도서 리스트 출력하기
SELECT A.BOOK_ID, DATE_FORMAT(A.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK A
WHERE (YEAR(A.PUBLISHED_DATE) = 2021) AND (A.CATEGORY = '인문')
ORDER BY A.PUBLISHED_DATE ASC
강원도에 위치한 생산공장 목록 출력하기
주소가 도의 이름으로 시작하기 때문에, LIKE '강원도%'를 활용하여 강원도로 시작하는 주소를 가진 모든 생산공장을 찾는다.
SELECT A.FACTORY_ID, A.FACTORY_NAME, A.ADDRESS FROM FOOD_FACTORY A
WHERE A.ADDRESS LIKE '강원도%'
ORDER BY A.FACTORY_ID ASC
모든 레코드 조회하기
SELECT A.* FROM ANIMAL_INS A
ORDER BY ANIMAL_ID ASC
역순 정렬하기
SELECT A.NAME, A.DATETIME FROM ANIMAL_INS A
ORDER BY ANIMAL_ID DESC
아픈 동물 찾기
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A
WHERE A.INTAKE_CONDITION = 'Sick'
ORDER BY A.ANIMAL_ID ASC
어린 동물 찾기
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A
WHERE A.INTAKE_CONDITION != 'Aged'
ORDER BY A.ANIMAL_ID ASC
동물의 아이디와 이름
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A
ORDER BY A.ANIMAL_ID ASC
여러 기준으로 정렬하기
SELECT A.ANIMAL_ID, A.NAME, A.DATETIME FROM ANIMAL_INS A
ORDER BY A.NAME ASC, A.DATETIME DESC
상위 n개 레코드
가장 먼저 들어온 동물을 찾아야 하므로, DATETIME을 기준으로 오름차순 정렬한 후 LIMIT를 통해 테이블의 첫 번째에 위치한 데이터만 조회하여 이름을 출력해준다.
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1
조건에 맞는 회원수 구하기
SELECT COUNT(A.USER_ID) FROM USER_INFO A
WHERE YEAR(A.JOINED) = 2021 AND A.AGE >= 20 AND A.AGE <= 29
Level 2
3월에 태어난 여성 회원 목록 출력하기
생일이 3월인 - MONTH(DATE)를 활용하여 생일이 3월인 회원을 찾는다.
여성 회원 - GENDER가 W이면 여성 회원이다.
전화번호가 NULL인 경우 포함시키지 않아야 하므로 IS NOT NULL을 활용하여 전화번호가 NULL인 회원은 제외한다.
그리고 MEMBER_ID, MEMBER_NAME, GENDER 순으로 출력하는데 MEMBER_ID를 기준으로 오름차순 출력해야 하므로 ORDER_BY를 통해 오름차순 정렬해준다.
SELECT A.MEMBER_ID, A.MEMBER_NAME, A.GENDER,
DATE_FORMAT(A.DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH FROM MEMBER_PROFILE A
WHERE MONTH(A.DATE_OF_BIRTH) = 3 AND A.GENDER = 'W' AND A.TLNO IS NOT NULL
ORDER BY A.MEMBER_ID ASC
재구매가 일어난 상품과 회원 리스트 구하기
GROUP_BY를 활용하여 USER_ID와 PRODUCT_ID가 동시에 중복인 칼럼을 찾고 그 개수가 2개 이상이라면 중복되었다는 뜻이므로 그런 칼럼의 USER_ID, PRODUCT_ID를 출력해준다.
이 때 USER_ID는 ASC로 오름차순해주고, PRODUCT_ID는 DESC로 내림차순해준다.
SELECT A.USER_ID, A.PRODUCT_ID FROM ONLINE_SALE A
GROUP BY A.USER_ID, A.PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY A.USER_ID ASC, A.PRODUCT_ID DESC
'Programmers > Level 1~2' 카테고리의 다른 글
[Programmers/Level 1] 문자열 내 마음대로 정렬하기(Java) (1) | 2024.09.20 |
---|---|
[Programmers/Level 1~2] IS NULL(MySQL) (0) | 2023.05.26 |
[Programmers/Level 2] JOIN(MySQL) (0) | 2023.04.06 |
[Programmers/Level 2] GROUP BY(MySQL) (0) | 2023.04.06 |
[Programmers/Level 1~2] SUM, MAX, MIN(MySQL) (0) | 2023.04.06 |