11.29(금) 본캠프 5일째 기록

Laña·2024년 11월 29일
0
post-thumbnail

<직무 스터디>

대망의 직무 스터디 발표하는날!!!
내가 발표하는 것도 아닌데 왤케 떨리고 그랬는지 모르겠다ㅠ
다른 팀들이 발표하는걸 볼때 내용이 굉장히 전문적이어서 보면서 너무 간략하고 얕게 준비한건 아닌가싶었다..
발표 자료 양식에도 제한이 없길래 우리는 접근성이 가장 좋은 현재 팀 노션에 페이지를 생성하여 자료를 만들었는데, 우리랑 다른 한팀을 제외하면 다 PPT를 준비해왔다
(만들까 했지만 정리를 다했는데 PPT 만드는 것은 약간(?) 효율 떨어지는 일이라고 생각해 안했음. 거기에 팀원들이 한명씩 결석해서 말해볼 시간 부족했음ㅠ)

<오늘 배운 것 요약>

30. 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!

SELECT name
FROM doctors 
WHERE major LIKE '%성형외과%'
  1. 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!

ELECT major,
		COUNT(*)
FROM doctors
GROUP BY major

⭐⭐⭐32. 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!

SELECT  COUNT(*) AS "5년이상 근무자 수"
FROM doctors 
WHERE hire_date <= DATE_SUB(NOW(), INTERVAL 5 YEAR)

INERVAL, DATE_SUB()라는 함수를 처음 알게 되었음..!!

⭐⭐⭐33. 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!

SELECT name,
		DATEDIFF(NOW(),hire_date) AS "근무 기간"
FROM doctors 

DATEDIFF() 넌 또 뭐여ㅜㅠ

정답과는 상이한 부분이 조금 있어 그부분만 발췌를 하자면..
DATEDIFF(CURDATE(), hire_date) AS working_days
이렇다구 한다!


38. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!

SELECT COUNT(name)
FROM dpartments
  1. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name,
		d.name
FROM employees e INNER JOIN departments d ON e.department_id=d.id

⭐40. '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!

SELECT e.name
FROM employees e INNER JOIN departments d ON e.department_id=d.id
WHERE d.name = '기술팀'

⭐⭐⭐41. 부서별로 직원 수를 계산하는 쿼리를 작성해주세요!

SELECT d.name "부서명",
		COUNT(e.name) cnt_ppl
FROM employees e INNER JOIN department d ON e.department_id=d.id 
GROUP BY 1

예제를 연습할 수가 없으니 내가 이렇게 푼게 맞는지 이건 잘 모르겠음!!!
혹시 나중에 테이블을 직접 생성하고 데이터를 넣는 방법을 배운다면 꼭 다시 풀어봐야 될 것 같다..
일단 정답을 발췌하자면 아래와 같다.
SELECT d.name,
COUNT(e.id) AS employee_count
FROM departments d LEFT JOIN employees e ON d.id = e.department_id
GROUP BY d.id;

  1. 직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
SELECT d.name
FROM employees e LEFT JOIN departments ON e.department_id=d.id
WHERE e.name IS NULL
  1. '마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name
FROM employees e INNER JOIN departments ON e.department_id=d.id
WHERE d.name='마케팅팀'


44. 모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!

SELECT o.id,
		p.name
FROM  products p JOIN orders o ON p.id=o.product_id

⭐45. 총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!

SELECT  p.id,
		SUM(p.price*o.quantity) total_price
FROM products p INNER JOIN orders o ON p.id=o.product_id
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1

⭐46. 각 상품 ID별로 판매된 총 수량(quantity)을 계산하는 쿼리를 작성해주세요!

SELECT p.id,
		SUM(o.quantity) total_quantity
FROM products p INNER JOIN orders o ON p.id=o.product_id
GROUP BY 1
  1. 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'

⭐⭐48. 가장 많이 판매된 상품의 이름을 찾는 쿼리를 작성해주세요!

SELECT p.name,
	SUM(o.quantity) total_quantity
FROM products p INNER JOIN orders o ON p.id=o.product_id
GROUP BY p.id
ORDER BY total_quantity DESC
LIMIT 1
  1. 각 상품 ID별로 평균 주문 수량을 계산하는 쿼리를 작성해주세요!
SELECT p.id,
		AVG(o.quantity) avg_quantity
FROM products p INNER JOIN orders o ON p.id=o.product_id
GROUP BY 1
  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

이제 사전 캠프 걷기반 문제들은 거의 다 해가는데
(12.02.월 - 마지막이라 따로 적기가 애매해서 그냥 이 글에 추가하였다)
오늘 문제들은 내가 잘 하고 있는게 맞는가 싶어 직접 실습하면서 확인해보고 싶어서 테이블을 직접 생성해보려고 했지만,,,
데이터도 잘 넣었는데 안나오는 것을 보면 뭔가 문제가 더 있는 것 같다ㅜㅠㅠ
나중에라도 배우면 다시 하러오거나 답을 고칠 것 같음!!
오늘은 WIL도 적어야 하는데 시간을 많이 잡아버려서 이만 풀고 마쳐야 할듯 싶다~~~

profile
SQL, Python, Code Kata

0개의 댓글