1 문제 1: 최근 대출 도서 TOP 3
1.1 문제 정보
| 항목 | 내용 |
|---|---|
| 출처 | 튜터 생성 (앵커: Programmers “상위 n개 레코드” Lv.1, 정답률 ~82%) |
| 난이도 | Level 1 |
| SQL 유형 | ORDER BY 다중 정렬, LIMIT |
1.2 문제 설명
CREATE TABLE BOOK_LOAN (
loan_id INT PRIMARY KEY,
book_title VARCHAR(100),
loan_date DATE,
return_date DATE
);
INSERT INTO BOOK_LOAN VALUES
(1, 'Educated', '2024-04-01', '2024-04-14'),
(2, 'Dune', '2024-03-10', '2024-03-24'),
(3, 'Me Before You', '2024-03-10', '2024-03-17'),
(4, 'The Alchemist', '2024-02-20', '2024-03-05'),
(5, 'Atomic Habits', '2024-01-15', '2024-01-29');가장 최근에 대출된 도서 3권의 book_title, loan_date를 조회하라. - 정렬 기준 1: loan_date 내림차순 - 정렬 기준 2: 같은 날짜면 book_title 오름차순
기대 결과:
| book_title | loan_date |
|---|---|
| Educated | 2024-04-01 |
| Dune | 2024-03-10 |
| Me Before You | 2024-03-10 |
1.3 최종 풀이
ORDER BY loan_date DESC, book_title ASC: 대출일 내림차순 → 동률 시 제목 오름차순LIMIT 3: 상위 3행만 반환
1.4 Tips
- 핵심 개념:
ORDER BY 컬럼1 DESC, 컬럼2 ASC(다중 정렬 기준),LIMIT N - 함정: ORDER BY 다중 정렬은 쉼표(
,)로 구분한다.AND,THEN,+불가. - 팁: 동률(tie) 처리를 문제에서 명시하지 않아도 2차 정렬 기준을 항상 고려하는 습관을 들인다.
2 문제 2: 연봉 상위 직원 조회
2.1 문제 정보
| 항목 | 내용 |
|---|---|
| 출처 | 튜터 생성 (앵커: Programmers “상위 n개 레코드” Lv.1, 정답률 ~89%) |
| 난이도 | Level 1 |
| SQL 유형 | ORDER BY DESC, 다중 정렬, LIMIT |
2.2 문제 설명
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50) NOT NULL,
salary INT NOT NULL,
hire_date DATE NOT NULL
);
INSERT INTO employees VALUES
(1, '김철수', '개발', 8000000, '2019-03-15'),
(2, '이영희', '마케팅', 6000000, '2020-07-01'),
(3, '박민수', '개발', 9000000, '2021-01-20'),
(4, '최지은', '인사', 7000000, '2018-11-05'),
(5, '정현우', '개발', 8000000, '2020-04-10'),
(6, '강수진', '마케팅', 5500000, '2022-08-22');급여 기준 상위 3명의 employee_id, name, department, salary를 조회하라. 급여가 같은 경우 입사일이 빠른 직원을 우선한다.
기대 결과:
| employee_id | name | department | salary |
|---|---|---|---|
| 3 | 박민수 | 개발 | 9000000 |
| 1 | 김철수 | 개발 | 8000000 |
| 5 | 정현우 | 개발 | 8000000 |
2.3 최종 풀이
SELECT employee_id, name, department, salary
FROM employees
ORDER BY salary DESC, -- 1차: 급여 내림차순
hire_date ASC -- 2차: 동점 시 먼저 입사한 직원
LIMIT 3;ORDER BY salary DESC: 내림차순 명시 필수 (기본값 ASC = 오름차순)hire_date ASC: “더 오래 근무” = 입사일이 이른 날짜 = 오름차순- 다중 정렬은 쉼표(
,)로 구분 —AND사용 시 문법 오류
2.4 Tips
- 핵심 개념:
ORDER BY 컬럼 DESC, 다중 정렬 쉼표 구분,LIMIT N - 함정 1:
ORDER BY salary DESC AND hire_date ASC→ 문법 오류. AND는 WHERE 연산자 - 함정 2:
ORDER BY salary(ASC 기본) → 급여 낮은 순, 하위 3명 반환 - 함정 3: “빠른 입사 = 오랜 근무 = 오름차순(ASC)” — 방향을 반대로 쓰면 정반대 결과
- 팁: 결정적 결과를 보장하려면 정렬 컬럼 끝에 PK를 추가하는 습관을 들인다
3 문제 3: 주변기기 가격 정렬 조회
3.1 문제 정보
| 항목 | 내용 |
|---|---|
| 출처 | 튜터 생성 (앵커: Programmers “여러 기준으로 정렬하기” Lv.1, 정답률 ~85%) |
| 난이도 | Level 1 |
| SQL 유형 | ORDER BY 다중 정렬 (DESC + ASC), WHERE |
3.2 문제 설명
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
category VARCHAR(50),
price INT,
stock INT
);
INSERT INTO products VALUES
(1, 'Alpha Mouse', '주변기기', 25000, 50),
(2, 'Mech Keyboard', '주변기기', 85000, 30),
(3, 'Webcam Pro', '주변기기', 45000, 20),
(4, 'USB Hub 4-port', '주변기기', 25000, 100),
(5, 'Monitor Arm', '주변기기', 65000, 15),
(6, 'Mouse Pad XL', '악세서리', 12000, 200);카테고리가 ’주변기기’인 상품의 product_name과 price를 가격 내림차순으로 조회하라. 가격이 동일한 경우 상품명 오름차순으로 정렬한다.
기대 결과:
| product_name | price |
|---|---|
| Mech Keyboard | 85000 |
| Monitor Arm | 65000 |
| Webcam Pro | 45000 |
| Alpha Mouse | 25000 |
| USB Hub 4-port | 25000 |
3.3 최종 풀이
SELECT product_name,
price
FROM products
WHERE category = '주변기기'
ORDER BY price DESC,
product_name ASC;ORDER BY price DESC: 1차 정렬 — 가격 내림차순product_name ASC: 2차 정렬 — 동가격 시 이름 오름차순- 두 기준은 쉼표(
,)로 구분. 각 기준에 방향(DESC/ASC)을 독립 지정
3.4 Tips
- 핵심 개념:
ORDER BY 컬럼1 DESC, 컬럼2 ASC— 다중 정렬, 쉼표 구분 - 함정 1:
ORDER BY price DESC AND product_name ASC→ 문법 오류. AND는 WHERE 절 연산자 - 함정 2: 동가격 행이 있을 때 2차 정렬 없이
ORDER BY price DESC만 쓰면 순서가 비결정적 - 팁: 정렬 결과를 결정적으로 만들려면 동점 처리 기준(2차 정렬)을 항상 명시한다