상품 탐색
학습 범위
SELECT, WHERE, ORDER BY, LIMIT, COUNT, AVG, MIN, MAX, GROUP BY, HAVING, LIKE, CASE WHEN, IS NOT NULL
1. 현재 등록된 전체 상품 수를 구하세요.
현재 등록된 전체 상품 수를 구하세요.
힌트 1: COUNT(*) 집계 함수를 사용하세요
2. 가격이 높은 순으로 상위 5개 상품의 이름과 가격을 조회하세요.
가격이 높은 순으로 상위 5개 상품의 이름과 가격을 조회하세요.
힌트 1: ORDER BY price DESC로 정렬하고 LIMIT 5로 상위 5개만 가져오세요
정답
실행 결과 (5행)
| name | price |
|---|---|
| MacBook Air 15 M3 실버 | 5,481,100.00 |
| ASUS TUF Gaming RTX 5080 화이트 | 4,526,600.00 |
| ASUS Dual RTX 5070 Ti [특별 한정판 에디션] 저소... | 4,496,700.00 |
| Razer Blade 18 블랙 | 4,353,100.00 |
| Razer Blade 16 실버 | 3,702,900.00 |
3. 가격이 100,000원 이하인 상품의 이름, 브랜드, 가격을 가격 오름차순으로 조회하세요.
가격이 100,000원 이하인 상품의 이름, 브랜드, 가격을 가격 오름차순으로 조회하세요.
힌트 1: WHERE price <= 100000 조건과 ORDER BY price ASC를 사용하세요
정답
실행 결과 (총 48행 중 상위 7행)
| name | brand | price |
|---|---|---|
| TP-Link TG-3468 블랙 | TP-Link | 18,500.00 |
| 삼성 SPA-KFG0BUB 실버 | 삼성전자 | 21,900.00 |
| Arctic Freezer 36 A-RGB 화이트 | Arctic | 23,000.00 |
| Arctic Freezer 36 A-RGB 화이트 | Arctic | 29,900.00 |
| TP-Link Archer TBE400E 화이트 | TP-Link | 30,200.00 |
| 삼성 SPA-KFG0BUB | 삼성전자 | 30,700.00 |
| 로지텍 MK470 블랙 | 로지텍 | 31,800.00 |
4. 재고가 0인 상품의 이름과 SKU를 조회하세요.
재고가 0인 상품의 이름과 SKU를 조회하세요.
힌트 1: WHERE stock_qty = 0 조건으로 필터링하세요
정답
실행 결과 (1행)
| name | sku |
|---|---|
| Arctic Freezer 36 A-RGB 화이트 | CO-AIR-ARC-00049 |
5. 브랜드별로 몇 개의 상품이 있는지 세고, 상품 수가 많은 순으로 정렬하세요.
브랜드별로 몇 개의 상품이 있는지 세고, 상품 수가 많은 순으로 정렬하세요.
힌트 1: GROUP BY brand로 그룹화하고 COUNT(*)로 세기. ORDER BY ... DESC로 정렬
정답
실행 결과 (총 55행 중 상위 7행)
| brand | product_count |
|---|---|
| ASUS | 26 |
| 삼성전자 | 25 |
| 로지텍 | 17 |
| MSI | 13 |
| TP-Link | 11 |
| LG전자 | 11 |
| ASRock | 11 |
6. 단종일(discontinued_at)이 NULL이 아닌 상품의 이름, 가격, 단종일을 조회하세요.
단종일(discontinued_at)이 NULL이 아닌 상품의 이름, 가격, 단종일을 조회하세요.
힌트 1: IS NOT NULL로 NULL이 아닌 행만 필터링하세요
정답
SELECT name, price, discontinued_at
FROM products
WHERE discontinued_at IS NOT NULL
ORDER BY discontinued_at DESC;
실행 결과 (총 62행 중 상위 7행)
| name | price | discontinued_at |
|---|---|---|
| Dell XPS Desktop 8960 실버 | 1,249,400.00 | 2025-11-20 15:30:12 |
| Kingston FURY Beast DDR4 16GB 화이트 | 91,200.00 | 2025-11-18 04:06:13 |
| Intel Core Ultra 7 265K | 196,300.00 | 2025-11-16 21:11:33 |
| 한성 보스몬스터 DX7700 화이트 | 1,579,400.00 | 2025-10-25 03:47:01 |
| Intel Core Ultra 7 265K 화이트 | 170,200.00 | 2025-08-24 00:34:53 |
| SAPPHIRE PULSE RX 7800 XT 실버 | 1,146,300.00 | 2025-08-01 06:10:51 |
| SteelSeries Arctis Nova Pro Wireless 화이트 | 173,700.00 | 2025-06-27 12:36:27 |
7. 전체 상품의 평균 가격과 중간 가격대를 구하세요.
전체 상품의 평균 가격과 중간 가격대를 구하세요.
힌트 1: AVG(), MIN(), MAX() 집계 함수를 함께 사용하세요. ROUND()로 소수점 정리
정답
SELECT
ROUND(AVG(price), 2) AS avg_price,
ROUND(MIN(price), 2) AS min_price,
ROUND(MAX(price), 2) AS max_price
FROM products;
실행 결과 (1행)
| avg_price | min_price | max_price |
|---|---|---|
| 649,272.50 | 18,500.00 | 5,481,100.00 |
8. 브랜드가 'Samsung'인 상품의 이름, 가격, 재고를 조회하세요.
브랜드가 'Samsung'인 상품의 이름, 가격, 재고를 조회하세요.
힌트 1: WHERE brand = 'Samsung' 조건을 사용하세요. 문자열은 작은따옴표로 감싸기
9. 상품명에 "Gaming"이 포함된 상품을 조회하세요.
상품명에 "Gaming"이 포함된 상품을 조회하세요.
힌트 1: LIKE '%Gaming%'으로 부분 문자열을 검색하세요. %는 임의의 문자열을 의미
정답
실행 결과 (5행)
| name | brand | price |
|---|---|---|
| ASUS TUF Gaming RTX 5080 화이트 | ASUS | 4,526,600.00 |
| MSI Radeon RX 9070 XT GAMING X | MSI | 1,896,000.00 |
| MSI GeForce RTX 4070 Ti Super GAMING X | MSI | 1,744,000.00 |
| MSI Radeon RX 7900 XTX GAMING X 화이트 | MSI | 1,517,600.00 |
| APC Back-UPS Pro Gaming BGM1500B 블랙 | APC | 516,300.00 |
10. 재고가 10개 이하이고 판매 중(is_active = 1)인 상품의 이름, 재고, 가격을 조회하세요.
재고가 10개 이하이고 판매 중(is_active = 1)인 상품의 이름, 재고, 가격을 조회하세요.
힌트 1: WHERE 절에서 AND로 두 조건을 결합하세요: stock_qty <= 10 AND is_active = 1
정답
SELECT name, stock_qty, price
FROM products
WHERE stock_qty <= 10
AND is_active = 1
ORDER BY stock_qty ASC;
실행 결과 (3행)
| name | stock_qty | price |
|---|---|---|
| Arctic Freezer 36 A-RGB 화이트 | 0 | 23,000.00 |
| 삼성 SPA-KFG0BUB | 4 | 30,700.00 |
| 로지텍 G502 HERO 실버 | 8 | 71,100.00 |
11. 최상위 카테고리(depth = 0)만 이름순으로 조회하세요.
최상위 카테고리(depth = 0)만 이름순으로 조회하세요.
힌트 1: categories 테이블에서 WHERE depth = 0으로 필터링하세요
정답
실행 결과 (총 18행 중 상위 7행)
| id | name | slug |
|---|---|---|
| 1 | 데스크톱 PC | desktop-pc |
| 5 | 노트북 | laptop |
| 10 | 모니터 | monitor |
| 14 | CPU | cpu |
| 17 | 메인보드 | motherboard |
| 20 | 메모리(RAM) | ram |
| 23 | 저장장치 | storage |
12. 10만원 미만, 10~50만원, 50~100만원, 100만원 이상으로 나누어 각 구간의 상품 수를 구하세요.
10만원 미만, 10~50만원, 50~100만원, 100만원 이상으로 나누어 각 구간의 상품 수를 구하세요.
힌트 1: CASE WHEN으로 가격 구간을 분류한 뒤 GROUP BY와 COUNT(*)로 집계하세요
정답
SELECT
CASE
WHEN price < 100000 THEN '10만원 미만'
WHEN price < 500000 THEN '10~50만원'
WHEN price < 1000000 THEN '50~100만원'
ELSE '100만원 이상'
END AS price_range,
COUNT(*) AS product_count
FROM products
GROUP BY price_range
ORDER BY MIN(price);
실행 결과 (4행)
| price_range | product_count |
|---|---|
| 10만원 미만 | 47 |
| 10~50만원 | 130 |
| 50~100만원 | 38 |
| 100만원 이상 | 65 |
13. 활성(is_active = 1) 공급업체의 회사명과 담당자명을 조회하세요.
활성(is_active = 1) 공급업체의 회사명과 담당자명을 조회하세요.
힌트 1: suppliers 테이블에서 WHERE is_active = 1로 필터링하세요
정답
실행 결과 (총 56행 중 상위 7행)
| company_name | contact_name | |
|---|---|---|
| AMD코리아 | 강중수 | contact@amd.test.kr |
| APC코리아 | 박성현 | contact@apc.test.kr |
| ASRock코리아 | 안예준 | contact@asrock.test.kr |
| HP코리아 | 김하윤 | contact@hp.test.kr |
| LG전자 공식 유통 | 김예준 | contact@lg.test.kr |
| MSI코리아 | 김채원 | contact@msi.test.kr |
| NZXT코리아 | 이경숙 | contact@nzxt.test.kr |
14. 각 상품의 마진율((price - cost_price) / price * 100)을 계산하고, 마진율이 높은
각 상품의 마진율((price - cost_price) / price * 100)을 계산하고, 마진율이 높은 순으로 10개를 조회하세요.
힌트 1: SELECT 절에서 산술 연산으로 마진율을 계산하세요. ROUND()로 소수점 정리, price > 0 조건으로 0 나눗셈 방지
정답
SELECT
name,
price,
cost_price,
ROUND((price - cost_price) / price * 100, 1) AS margin_pct
FROM products
WHERE price > 0
ORDER BY margin_pct DESC
LIMIT 10;
실행 결과 (총 10행 중 상위 7행)
| name | price | cost_price | margin_pct |
|---|---|---|---|
| Norton AntiVirus Plus | 69,700.00 | 28,200.00 | 59.50 |
| Norton AntiVirus Plus 실버 | 74,800.00 | 32,400.00 | 56.70 |
| Adobe Creative Cloud 1년 실버 | 327,300.00 | 147,300.00 | 55.00 |
| Windows 11 Pro 실버 | 423,000.00 | 198,800.00 | 53.00 |
| 한컴오피스 2024 기업용 실버 | 241,400.00 | 116,400.00 | 51.80 |
| Microsoft Office 2024 Home | 114,300.00 | 57,200.00 | 50.00 |
| 로지텍 G502 HERO 실버 | 71,100.00 | 36,500.00 | 48.70 |
15. 상품이 3개 이상인 브랜드만 대상으로, 평균 가격과 상품 수를 구하세요.
상품이 3개 이상인 브랜드만 대상으로, 평균 가격과 상품 수를 구하세요.
힌트 1: GROUP BY brand 후 HAVING COUNT(*) >= 3으로 그룹을 필터링하세요. HAVING은 집계 후 조건
정답
SELECT
brand,
COUNT(*) AS product_count,
ROUND(AVG(price), 2) AS avg_price,
ROUND(MIN(price), 2) AS min_price,
ROUND(MAX(price), 2) AS max_price
FROM products
GROUP BY brand
HAVING COUNT(*) >= 3
ORDER BY avg_price DESC;
실행 결과 (총 34행 중 상위 7행)
| brand | product_count | avg_price | min_price | max_price |
|---|---|---|---|---|
| Razer | 9 | 1,764,888.89 | 52,500.00 | 4,353,100.00 |
| ASUS | 26 | 1,683,630.77 | 47,200.00 | 4,526,600.00 |
| 레노버 | 5 | 1,597,760.00 | 1,389,800.00 | 1,866,100.00 |
| HP | 6 | 1,479,016.67 | 895,000.00 | 2,080,300.00 |
| 주연테크 | 4 | 1,413,550.00 | 810,300.00 | 1,849,900.00 |
| LG전자 | 11 | 1,346,836.36 | 308,900.00 | 1,828,800.00 |
| 한성컴퓨터 | 4 | 1,104,075.00 | 739,900.00 | 1,579,400.00 |