[25.02.10] 사전캠프 14일차 아티클스터디+걷기반문풀

김명서·2025년 2월 10일
1

TIL_sparta

목록 보기
15/60
post-thumbnail

아티클스터디

오늘의 아티클
데이터 분석으로 유저의 마음을 읽는 서비스가 되려면
[주제]

  • 데이터 분석으로 유저의 마음을 읽는 서비스가 되려면; 데이터 활용이 고객에게 되돌려주는 가치

[아티클 요약] **

  • 서비스 운영은 가설을 세우고 검증하는 일의 연속
    ▶️이때 데이터는 가설 검증의 도구
    ▶️가설을 어떻게 세우는가?→직관
    데이터를 직관적으로 해석하고 가설을 세우는 능력은 데이터 리터러시에 포함!
  • 직관을 밝히는 방법
    -산업동향에 대한 이해
    ex.
    🔻콘텐츠 불법 유출을 막기 위해 → ‘콘텐츠 불법 유통’이라는 산업 내 고질적 문제의 패턴과 특성에 대한 이해
    🔻유저에 대한 이해→고객 관련 cs로 인사이트 쌓기+데이터분석
    ⇒ 데이터와 직관을 동시에 활용한다
  • 데이터 기반 의사결정의 핵심: 커뮤니케이션
    시각화 data visualization
    :정보를 그래프, 차트, 지도 등 시각적 요소로 나타내는 것
    목적▶️ 제3자가 보아도 요점을 이해할 수 있도록 직관적이고 단순명료한 메시지로 전달하는 것
💡

특정 지표 추이를 꾸준히 살펴봐야 할 때는
파이썬(Python), 태블로(Tableau), 리대시(Redash) 등 시각화 도구로 ‘대시보드’를 만듦.

▶️커뮤니케이션의 자세
각자의 해석과 판단에는 주관이 개입할 수 밖에 없음.
→ 지식과 경험이 많은 전문가의 결정을 과감히 따르는 것도 신속하고 합리적인 방법이 될 수 있음

[인사이트]

마찬가지로 이번 아티클에서도,
데이터(숫자)에 대한 이해 뿐만 아니라, 전반적인 산업이나 문제현상에 대한 이해가 기반이 되어야한다는 것과 커뮤니케이션이 중요하다는 사실을 확인할 수 있었다. 실제 실습프로젝트를 진행할 때, 이 부분을 빠뜨리지 말고 준비해야겠다고 생각했다.
나는 고객의 행동과 액션을 기반으로 한 프로젝트를 설계하는 것에 관심이 있는데, 마찬가지로 고객의 행동을 좀 더 직관적으로 이해하기 위해서 어떤 자료(ex.클릭수, 노출빈도, 이탈경로 etc)를 활용할지, 실제 업계에서는 어떤 자료를 어떻게 활용하고 있는지 좀 더 살펴보고 싶어졌다.

데이터와 직관, 둘 중 하나에 더 치우쳐지기 쉽다고 생각하는데 적절하게 유지할 수 있도록 하는 경험과 사고능력을 앞으로 많이 길러나가고 싶다.

.

데이터분석_퀘스트

걷기반_데이터베이스

몇주동안.. 아무리 영상+구글링 해가면서 따라해봐도 워크벤치에서 실행이 안됐었다ㅜㅠ sql책을 대출해서 sql설치부터 차근차근 따라했더니 이제된다 !!

감격......😳!
.

문제풀이

  1. orders 테이블에서 주문 수량(amount)이 2개 이상인 주문을 진행한 소비자의 ID(customer_id)만 선택하는 쿼리를 작성해주세요!
SELECT customer_id
from orders
where amount >=2
  1. orders 테이블에서 2023년 11월 2일 이후에 주문된 주문 수량(amount)이 2개 이상인 주문을 선택하는 쿼리를 작성해주세요!
SELECT *
from orders
where order_date > '2023-11-02'
and amount>=2
  1. orders 테이블에서 주문 수량이 3개 미만이면서 배송비(shipping_fee)가 15000원보다 비싼 주문을 선택하는 쿼리를 작성해주세요!
SELECT *
from orders
where shipping_fee>15000
and amount<3
  1. orders 테이블에서 배송비가 높은 금액 순으로 정렬하는 쿼리를 작성해주세요!
SELECT *
from orders
order by shipping_fee desc

이제 놀만큼 놀았으니 다시 공부해봅시다!

  1. sparta_students 테이블에서 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리를 작성해주세요!
SELECT name,track
FROM sparta_student
  1. sparta_students 테이블에서 Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리를 작성해주세요!

    아니다 <> , Unity 변수명에 ' ' 작은따옴표!!!

SELECT *
FROM sparta_student
where track <>'Unity'
  1. sparta_students 테이블에서 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리를 작성해주세요!
    *❌틀린이유❌
    IN '2021','2023'으로 썼는데, IN(2021,2023)으로 써야함
SELECT *
FROM sparta_student
where enrollment_year in(2021,2023)
  1. sparta_students 테이블에서 Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리를 작성해주세요!
select *
from sparta_student
where track = 'Node.js' 
and grade = 'A'

5) 공부하다보니 팀 프로젝트 시간이 왔어요!

  1. team_projects 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
SELECT name
from team_projects
where aws_cost>=40000
  1. team_projects 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!

    year() => 연도 함수 사용

SELECT *
from team_projects
where Year(start_date)=2022
  1. team_projects 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
    start_date에 IN함수를 써야하나했는데..
    안배운 함수였다 !
    CURDATE():The CURDATE() function returns the current date. Note: The date is returned as "YYYY-MM-DD" (string) or as YYYYMMDD (numeric).
SELECT *
FROM team_projects 
WHERE CURDATE()  
BETWEEN start_date 
AND end_date

무튼 결과값이 안나오는건 동일하다.
20.
team_projects 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
🔴날짜 세는 함수가 따로 있었나보다

DATEDIFF('end_date', 'start_date')

6) 팀 프로젝트 열심히 했으니 다시 놀아볼까요?!

  1. lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
    ❌나는 order by decs를 써서 정렬만 했는데, 순위를 매기는 RANK()를 써서 lol_rank값을 새로 만들어줘야했다
    sql rank() over 함수

  2. lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요!

SELECT name
from lol_users
order by join_date desc

이게 끝 아님 !!
정렬해놓은 상태에서Limit을 사용해 한개만 가져오라고 해야한다.

SELECT name FROM lol_users ORDER BY join_date DESC LIMIT 1

최종적으로 이렇게 작성해주면 '구구이'가 나온다.

  1. lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
SELECT name, rating, rank() over(order by rating desc) as lol_rank
from lol_users
order by region

✅group by 를 쓸지, order by를 쓸지 고민했는데..!!

  1. lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
SELECT region, avg(rating)
FROM lol_users 
group BY region

7) 랭크게임 하다가 싸워서 피드백 남겼어요…

  1. lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
SELECT * 
FROM lol_feedbacks
order by satisfaction_score desc
  1. lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
SELECT user_name, Max(feedback_date)
FROM lol_feedbacks
group by user_name
  1. lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
SELECT count(*)
FROM lol_feedbacks
where satisfaction_score =5

아 재밌다
28.
lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!

SELECT user_name, count(feedback_date) cnt_f
FROM  lol_feedbacks
group by user_name
order by cnt_f desc limit 3
  1. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
SELECT feedback_date, avg(satisfaction_score) avg_s
FROM  lol_feedbacks
group by feedback_date
order by avg_s desc limit 1

8) LOL을 하다가 홧병이 나서 병원을 찾아왔습니다.

  1. doctors 테이블에서 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!
SELECT name 
FROM doctors
where major='성형외과'
  1. doctors 테이블에서 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!
SELECT major, count(*)
FROM doctors
group by major
  1. doctors 테이블에서 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!
    🔻일단 나는 이렇게 작성했는데
SELECT count(*)
FROM doctors
where datediff(curdate(),hire_date) >=5

3명이 나온다. 왜냐??
🔴DATEDIFF는 날짜를 세는 개념이라 >=5는 5일 이상을 의미하게된다. 그래서 3명이 나온 것이다. 여기서 >=5*365로만 바꿔주면 된다.

스파르타 답안은 아래와같다.

SELECT COUNT(*) AS num_of_doctors 
FROM doctors 
WHERE hire_date <= DATE_SUB(CURDATE(), INTERVAL 5 YEAR);

🔻이 개념을 사용한 것 같다.

  1. doctors 테이블에서 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!
SELECT name, datediff(curdate(),hire_date) AS working_days
FROM doctors

9)아프면 안됩니다! 항상 건강 챙기세요!

  1. patients 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!
SELECT gender,count(*)
FROM patients
group by gender
  1. patients 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!
SELECT count(*)
FROM patients
where datediff(curdate(),birth_date) >=40*365
  1. patients 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해주세요!
SELECT *
FROM patients 
WHERE last_visit_date <= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

⭐참고:INTERVAL 1 YEAR 은 각각 띄어쓰기 해야한다
37.
patients 테이블에서 생년월일이 1980년대인 환자들의 수를 계산하는 쿼리를 작성해주세요!

SELECT count(*)
FROM patients 
WHERE birth_date between '1980-01-01' and '1989-12-31'

10) 이젠 테이블이 2개입니다

  1. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
SELECT count(*)
from departments
  1. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
![](https://velog.velcdn.com/images/kim3031853/post/89a244c6-c7de-4be5-808f-cc9268d7cab4/image.png)


❌sql을 안본지 좀 됐더니 조인을 어떻게 쓰는지 헷갈려서 답을 보고 힌트를 얻었다 ㅠㅠ!
40.
'기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!

SELECT e.name 
FROM employees e INNER JOIN departments d 
ON e.department_id = d.id 
WHERE d.name = '기술팀'
  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 departments d LEFT JOIN employees e 
ON d.id = e.department_id 
WHERE e.id IS NULL

느낀점

확실히 강의에만 있는 내용이 전부가 아니라, 문제를 많이 경험하면서 구글링을 통해 얻는 것도 학습의 굉장히 큰 부분인 것 같다.
테이블을 직접만들면서 해보니까 훨씬 몰입도가 있고 재밌었다.
달리기반...할 수 있을지.. 아직 자신이 없기는 한데
오늘처럼 차근차근 풀어나가야겠다 !!
내일도 화이팅 :)

profile
경영학도의 데이터분석 성장기💥

0개의 댓글

관련 채용 정보