본문 바로가기
TIL

[TIL] 241112

by 좌우지간에 2024. 11. 12.

SQL강의

SQL Pivot table (여러개의 그룹별로 데이터분류)

max(if()) 로 max를 붙여주는게 특징

 

window function rank와 sum함수

rank () over(partition by a order by b) 순위

sum(a) over (partition by b) 전체합

sum(a) over (partition by b order by a) >> 누적합

 

sql퀘스트

# 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
SELECT count(*) '총_부서_수'
FROM departments
;

# 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name '직원',
	     d.name '부서이름'
FROM employees e 
inner join departments d on e.department_id = d.id
;

# '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name '직원이름'
FROM employees e 
inner join departments d on e.department_id = d.id
WHERE d.name = '기술팀'
;

# 부서별로 직원 수를 계산하는 쿼리를 작성해주세요!
SELECT d.name '부서이름',
	     count(e.name) '직원 수'
FROM employees e 
left join departments d on e.department_id = d.id
GROUP BY 1


# 직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
SELECT d.name '부서이름'
FROM departments d
left join employees e on e.department_id = d.id
WHERE e.name is null

# '마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name '직원이름'
FROM employees e 
inner join departments d on e.department_id = d.id
WHERE d.name = '마케팅팀'
;
#1.모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT o.id '주문ID',
			 p.name '상품이름'
FROM products p
inner join orders o on p.id = o.product_id
; 


#2.총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!
SELECT p.id 'ID',
	     sum(p.price * o.quantity) '총매출'
FROM products p
inner join orders o on p.id = o.product_id
group by 1
order by 2 desc
limit 1
; 


#3.각 상품 ID별로 판매된 총 수량(quantity)을 계산하는 쿼리를 작성해주세요!
SELECT product_id,
       sum(quantity) '총 수량'
FROM orders
group by 1
;


#4.2023년 3월 3일 이후에 주문된 모든 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT p.name '상품이름'
FROM products p
inner join orders o on p.id = o.product_id
where o.order_date > '2023-03-03'
; 


#5.가장 많이 판매된 상품의 이름을 찾는 쿼리를 작성해주세요!
SELECT p.name '상품이름',
			 sum(o.quantity) '판매수량'
FROM products p
inner join orders o on p.id = o.product_id
group by 1
order by 2 desc
limit 1
; 


#각 상품 ID별로 평균 주문 수량을 계산하는 쿼리를 작성해주세요!
SELECT product_id,
       avg(quantity) '평균 주문 수량'
FROM orders
group by 1
;


#판매되지 않은 상품의 ID와 이름을 찾는 쿼리를 작성해주세요!
SELECT p.id,
			 p.name
FROM products p
left join orders o on p.id = o.product_id
where o.id is null
;

 

'TIL' 카테고리의 다른 글

[TIL] 241115  (5) 2024.11.15
[TIL] 241114  (4) 2024.11.14
[TIL] 241111  (1) 2024.11.11
[TIL] 241110  (1) 2024.11.10
[TIL] 241109  (1) 2024.11.09