SQL 기본
1.sparta_employees 테이블에서 모든 직원의 이름(name)과 직급(position)을 선택하는 쿼리를 작성해주세요.
SELECT name as employees_name, position as "직급" FROM sparta_employees
2.sparta_employees 테이블에서 중복 없이 모든 직급(position)을 선택하는 쿼리를 작성해주세요.
SELECT DISTINCT position as "직급" FROM sparta_employees
3.sparta_employees 테이블에서 연봉(salary)이 40000과 60000 사이인 직원들을 선택하는 쿼리를 작성해주세요.
SELECT salary as employees_salary FROM sparta_employees WHERE salary BETWEEN 40000 AND 60000
4.sparta_employees 테이블에서 입사일(hire_date)이 2023년 1월 1일 이전인 모든 직원들을 선택하는 쿼리를 작성해주세요.
SELECT hire_date as before_hire_date FROM sparta_employees WHERE hire_date < '2023-01-01'
5.products 테이블에서 제품 이름(product_name)과 가격(price)만을 선택하는 쿼리를 작성해주세요.
SELECT product_name AS "제품명", price AS "가격" FROM products;
6.products 테이블에서 제품 이름에 '프로'가 포함된 모든 제품을 선택하는 쿼리를 작성해주세요.
SELECT product_name AS "제품명" FROM products WHERE product_name LIKE '%프로%'
7.products 테이블에서 제품 이름이 '갤'로 시작하는 모든 제품을 선택하는 쿼리를 작성해주세요.
SELECT product_name AS "제품명" FROM products WHERE product_name LIKE '갤%'
8.products 테이블에서 모든 제품을 구매하기 위해 필요한 돈을 계산하는 쿼리를 작성해주세요.
SELECT sum(price) AS total_price FROM products
9.orders 테이블에서 주문 수량(amount)이 2개 이상인 주문을 진행한 소비자의 ID(customer_id)만 선택하는 쿼리를 작성해주세요!
select customer_id AS "고객ID" from oders where amount >= 2
10.orders 테이블에서 2023년 11월 2일 이후에 주문된 주문 수량(amount)이 2개 이상인 주문을 선택하는 쿼리를 작성해주세요!
select * from oders where amount >= 2 and order_date > '2023-11-02'
11.orders 테이블에서 주문 수량이 3개 미만이면서 배송비(shipping_fee)가 15000원보다 비싼 주문을 선택하는 쿼리를 작성해주세요!
select * from oders where amount < 3 and shipping_fee > 15000
12.orders 테이블에서 배송비가 높은 금액 순으로 정렬하는 쿼리를 작성해주세요!
select * from oders ORDER BY shipping_fee DESC
13.sparta_students 테이블에서 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리를 작성해주세요!
select name, track from sparta_students
14.sparta_students 테이블에서 Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리를 작성해주세요!
select name from sparta_students where track <> 'Unity'
15.sparta_students 테이블에서 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리를 작성해주세요!
select name from sparta_students where enrollment_year = 2021 or 2023 # enrollment_year 이 int 라는 가정하에
16.sparta_students 테이블에서 Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리를 작성해주세요!
select enrollment_year from sparta_students where track = 'Node.js' and grade = 'A'
17.team_projects 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
select name as "프로젝트" from team_projects where aws_cost >= 40000
18.team_projects 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!
select name as "프로젝트" from team_projects where start_date >= '2022-01-01' and start_date <= '2022-12-31'
19.team_projects 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
select name as "프로젝트" from team_projects where start_date <= CURDATE() and end_date >= CURDATE()
20.team_projects 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
select TIMESTAMPDIFF(DAY, start_date,end_date) as "일" from checkins c
21.lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
select id, name, rating RANK() OVER(PARTITION BY region ORDER BY rating DESC) "st" from lol_users
22.lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
SELECT * FROM lol_users ORDER BY join_date DESC LIMIT 1
23.lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
select id, name, rating RANK() OVER(PARTITION BY region ORDER BY rating DESC) "st" from lol_users ORDER BY name
24.lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
SELECT region, AVG(rating) AS avg_rating FROM lol_users GROUP BY region;
25.lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
SELECT * FROM lol_feedbacks ORDER BY satisfaction_score DESC
26.lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
SELECT *, MAX(feedback_date) as "최신 피드백" FROM lol_feedbacks
27.lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
SELECT satisfaction_score, count(satisfaction_score) as count_score FROM lol_feedbacks WHERE satisfaction_score = 5
28.lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
SELECT user_name, COUNT(*) AS feedback_count FROM lol_feedbacks GROUP BY user_name ORDER BY feedback_count DESC LIMIT 3;
29.lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
SELECT feedback_date, AVG(satisfaction_score) AS avg_satisfaction FROM lol_feedbacks GROUP BY feedback_date ORDER BY avg_satisfaction DESC LIMIT 1;
30.doctors 테이블에서 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!
SELECT * FROM doctors WHERE major = '성형외과'
31.doctors 테이블에서 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!
SELECT count(major) "전공별 의사 수" FROM doctors GROUP BY major
32.doctors 테이블에서 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!
SELECT major, COUNT(*) AS five_years_hire_date FROM doctors WHERE TIMESTAMPDIFF(MONTH, hire_date, CURDATE()) >= 60 GROUP BY major;
33.doctors 테이블에서 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!
SELECT name AS "이름", DATEDIFF(CURDATE(), hire_date) "근무일" FROM doctors
34.patients 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!
SELECT gender AS "성별" COUNT(gender) FROM patients GROUP BY gender
35.patients 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!
SELECT birth_date AS "생년일일" count(birth_date) FROM patients WHERE TIMESTAMPDIFF(YEAR, CURDATE(), birth_date) >= 40 GROUP BY 1
36.patients 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해주세요!
SELECT * FROM patients WHERE TIMESTAMPDIFF(YEAR, last_visit_date, birth_date) >= 1
37.patients 테이블에서 생년월일이 1980년대인 환자들의 수를 계산하는 쿼리를 작성해주세요!
SELECT brith_date AS "생년월일" count(brith_date) AS "1980년대" FROM patients WHERE DATE_FORMAT(brith_date, '%Y') BETWEEN '1980' AND '1990';
38.현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
SELECT COUNT(name) count_dep FROM departments
39.모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
SELECT * FROM employees e INNER JOIN departments d ON e.department_id = d.id
40.'기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT * FROM employees e INNER JOIN departments d ON e.department_id = d.id WHERE d.name = '기술팀'
41.부서별로 직원 수를 계산하는 쿼리를 작성해주세요!
SELECT d.name AS department_name, COUNT(e.id) count_user FROM employees e INNER JOIN departments d ON e.department_id = d.id GROUP BY d.name
42.직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
SELECT a.department_name AS non_user FROM ( SELECT d.name AS department_name, COUNT(e.id) AS count_user FROM departments d LEFT JOIN employees e ON d.id = e.department_id GROUP BY d.name ) a WHERE a.count_user = 0;
43.'마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name FROM employees e INNER JOIN departments d ON e.department_id = d.id WHERE d.name = '마케팅팀';
44.모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT o.id order_id, p.name product_name FROM orders o INNER JOIN products p ON o.product_id = p.id
45.총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!
SELECT a.order_id id, a.total_price price FROM( SELECT o.id order_id, p.name product_name, p.price * o.quantity AS total_price FROM orders o INNER JOIN products p ON o.product_id = p.id ) a ORDER BY a.total_price DESC LIMIT 1
46.각 상품 ID별로 판매된 총 수량(quantity)을 계산하는 쿼리를 작성해주세요!
SELECT p.id product_id, o.quantity quantity FROM orders o INNER JOIN products p ON o.product_id = p.id
47.2023년 3월 3일 이후에 주문된 모든 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT p.name product_name, o.quantity quantity FROM orders o INNER JOIN products p ON o.product_id = p.id WHERE o.order_date > '2023-03-03'
48.가장 많이 판매된 상품의 이름을 찾는 쿼리를 작성해주세요!
SELECT p.name AS product_name FROM orders o INNER JOIN products p ON o.product_id = p.id WHERE o.quantity = (SELECT MAX(quantity) FROM orders);
49.각 상품 ID별로 평균 주문 수량을 계산하는 쿼리를 작성해주세요!
SELECT a.product_id, AVG(a.quantity) avg_quantity FROM( SELECT p.product_id, o.quantity FROM orders o INNER JOIN products p ON o.product_id = p.id ) a GROUP BY a.product_id
50.판매되지 않은 상품의 ID와 이름을 찾는 쿼리를 작성해주세요!
SELECT a.product_id, a.quantity FROM( SELECT p.product_id, o.quantity FROM orders o INNER JOIN products p ON o.product_id = p.id ) a WHERE a.quantity > 0 GROUP BY a.product_id