1. 중복 제거하기
SELECT COUNT(DISTINCT NAME) AS 'COUNT' FROM ANIMAL_INS;
SQL
복사
2. 가격이 제일 비싼 식품의 정보 출력하기
•
MAX와 서브쿼리 활용
SELECT * FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
SQL
복사
•
내림차순 활용
SELECT * FROM FOOD_PRODUCT ORDER BY PRICE DESC LIMIT 1;
SQL
복사
3. 최솟값 구하기
SELECT MIN(DATETIME) FROM ANIMAL_INS;
SQL
복사
4. 동명 동물 수 찾기
-- 코드를 입력하세요
SELECT NAME, COUNT(NAME) AS 'COUNT'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME
SQL
복사
5. 이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%'
AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
SQL
복사
6. NULL 처리하기
-- 코드를 입력하세요
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS;
SQL
복사
7. 카테고리 별 상품 개수 구하기
-- 코드를 입력하세요
SELECT SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY;
SQL
복사
8. 경기도에 위치한 식품 창고 목록 출력하기
-- 코드를 입력하세요
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS,
IFNULL(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '%경기도%'
ORDER BY WAREHOUSE_ID;
SQL
복사
9. 3월에 태어난 여성 회원 목록 출력하기
SELECT
M.MEMBER_ID,
M.MEMBER_NAME,
M.GENDER,
DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE M
WHERE M.TLNO IS NOT NULL
AND M.GENDER = 'W'
AND MONTH(M.DATE_OF_BIRTH) = '3'
ORDER BY M.MEMBER_ID ASC;
SQL
복사
10. 업그레이드 된 아이템 구하기
SELECT
T.ITEM_ID,
C.ITEM_NAME,
C.RARITY
FROM ITEM_TREE AS T
JOIN ITEM_INFO AS C
ON C.ITEM_ID = T.ITEM_ID
JOIN ITEM_INFO AS P
ON P.ITEM_ID = T.PARENT_ITEM_ID
WHERE P.RARITY = 'RARE'
ORDER BY T.ITEM_ID DESC;
-- 서브쿼리 활용
SELECT T.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_TREE T
JOIN ITEM_INFO I ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY T.ITEM_ID DESC;
SQL
복사
11. 조건에 맞는 개발자 찾기
SELECT DISTINCT
D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS AS D
JOIN SKILLCODES AS S
ON (D.SKILL_CODE & S.CODE) = S.CODE
WHERE S.NAME IN ('Python', 'C#')
ORDER BY D.ID;
-- 서브쿼리 활용
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) > 0
OR (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) > 0
ORDER BY ID;
SQL
복사
12. 특정 물고기를 잡은 총 수 구하기
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO F
JOIN FISH_NAME_INFO N
ON F.FISH_TYPE = N.FISH_TYPE
WHERE N.FISH_NAME IN ('BASS', 'SNAPPER');
SQL
복사
13. 특정 형질을 가지는 대장균 찾기
SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE
(GENOTYPE & 2) = 0 -- 형질2 없음
AND (
(GENOTYPE & 1) > 0 -- 형질1 있음
OR (GENOTYPE & 4) > 0 -- 형질3 있음
);
SQL
복사
14. 부모의 형질을 모두 가지는 대장균 찾기
SELECT
C.ID,
C.GENOTYPE,
P.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA AS C
JOIN ECOLI_DATA AS P
ON C.PARENT_ID = P.ID
WHERE (C.GENOTYPE & P.GENOTYPE) = P.GENOTYPE
ORDER BY C.ID ASC;
SQL
복사
15. ROOT 아이템 구하기
SELECT I.ITEM_ID, I.ITEM_NAME
FROM ITEM_INFO I
JOIN ITEM_TREE T ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY I.ITEM_ID;
-- 아이템 트리에 아예 등록되지 않은 경우 LEFT JOIN 활용
SELECT I.ITEM_ID, I.ITEM_NAME
FROM ITEM_INFO I
LEFT JOIN ITEM_TREE T ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY I.ITEM_ID;
SQL
복사
16. 동물 수 구하기
SELECT COUNT(*) AS count
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IS NOT NULL;
SQL
복사
17. 조건에 맞는 아이템들의 가격의 총합 구하기
SELECT SUM(PRICE) AS TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND';
SQL
복사
18. 연도별 대장균 크기의 편차 구하기
SELECT
YEAR(DIFFERENTIATION_DATE) AS YEAR,
MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE))
- SIZE_OF_COLONY AS YEAR_DEV,
ID
FROM ECOLI_DATA
ORDER BY YEAR, YEAR_DEV, ID;
SQL
복사
19. 성분으로 구분한 아이스크림 총 주문량
SELECT
I.INGREDIENT_TYPE,
SUM(F.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS F
JOIN ICECREAM_INFO AS I
ON F.FLAVOR = I.FLAVOR
WHERE I.INGREDIENT_TYPE IN ('sugar_based', 'fruit_based')
GROUP BY I.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC;
SQL
복사
20. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
-- 코드를 입력하세요
SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE
OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;
SQL
복사
21. 진료과별 총 예약 횟수 출력하기
SELECT
MCDP_CD AS 진료과코드,
COUNT(*) AS 5월예약건수
FROM APPOINTMENT
WHERE MONTH(APNT_YMD) = 5
GROUP BY MCDP_CD
ORDER BY 5월예약건수 ASC, 진료과코드 ASC;
SQL
복사
22. 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat', 'Dog')
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC;
SQL
복사
23. 가격대 별 상품 개수 구하기
SELECT
TRUNCATE(PRICE, -4) AS PRICE_GROUP,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;
SELECT
FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, -- 만원 단위 최소값 라벨
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;
SQL
복사
24. 입양 시각 구하기(1)
SELECT
HOUR(DATETIME) AS HOUR,
COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR;
SQL
복사
25. 조건에 맞는 사원 정보 조회하기
WITH totals AS (
SELECT
HE.EMP_NO,
SUM(HG.SCORE) AS SCORE
FROM HR_EMPLOYEES HE
JOIN HR_GRADE HG
ON HE.EMP_NO = HG.EMP_NO
WHERE HG.YEAR = 2022
GROUP BY HE.EMP_NO
),
max_score AS (
SELECT MAX(SCORE) AS MAX_SCORE
FROM totals
)
SELECT
T.SCORE,
HE.EMP_NO,
HE.EMP_NAME,
HE.POSITION,
HE.EMAIL
FROM TOTALS T
JOIN HR_EMPLOYEES HE ON HE.EMP_NO = T.EMP_NO
JOIN max_score M ON T.SCORE = M.MAX_SCORE
ORDER BY HE.EMP_NO;
SELECT
tt.SCORE,
he.EMP_NO,
he.EMP_NAME,
he.POSITION,
he.EMAIL
FROM (
SELECT
HE.EMP_NO,
SUM(HG.SCORE) AS SCORE,
RANK() OVER (ORDER BY SUM(HG.SCORE) DESC) AS rnk
FROM HR_EMPLOYEES HE
JOIN HR_GRADE HG
ON HE.EMP_NO = HG.EMP_NO
WHERE HG.YEAR = 2022
GROUP BY HE.EMP_NO
) tt
JOIN HR_EMPLOYEES he ON he.EMP_NO = tt.EMP_NO
WHERE tt.rnk = 1
ORDER BY he.EMP_NO;
SQL
복사
26. 노선별 평균 역 사이 거리 조회하기
SELECT
ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY SUM(D_BETWEEN_DIST) DESC;
SQL
복사
27. 물고기 종류 별 잡은 수 구하기
SELECT
COUNT(*) AS FISH_COUNT,
I.FISH_NAME AS FISH_NAME
FROM FISH_INFO F
JOIN FISH_NAME_INFO I
ON F.FISH_TYPE = I.FISH_TYPE
GROUP BY I.FISH_NAME
ORDER BY FISH_COUNT DESC;
SQL
복사
28. 월별 잡은 물고기 수 구하기
SELECT
COUNT(*) AS FISH_COUNT,
MONTH(TIME) AS MONTH
FROM FISH_INFO
GROUP BY MONTH
ORDER BY MONTH;
SQL
복사
29. 조건에 맞는 도서와 저자 리스트 출력하기
SELECT
B.BOOK_ID,
A.AUTHOR_NAME,
DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK B
JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY PUBLISHED_DATE ASC;
SQL
복사
30. 상품별 오프라인 매출 구하기
SELECT
P.PRODUCT_CODE,
SUM(P.PRICE * O.SALES_AMOUNT) AS SALES
FROM PRODUCT P
JOIN OFFLINE_SALE O
ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, P.PRODUCT_CODE ASC;
SQL
복사



