오늘의 아티클
데이터 분석으로 유저의 마음을 읽는 서비스가 되려면
[주제]
[아티클 요약] **
특정 지표 추이를 꾸준히 살펴봐야 할 때는
파이썬(Python), 태블로(Tableau), 리대시(Redash) 등 시각화 도구로 ‘대시보드’를 만듦.
▶️커뮤니케이션의 자세
각자의 해석과 판단에는 주관이 개입할 수 밖에 없음.
→ 지식과 경험이 많은 전문가의 결정을 과감히 따르는 것도 신속하고 합리적인 방법이 될 수 있음
[인사이트]
마찬가지로 이번 아티클에서도,
데이터(숫자)에 대한 이해 뿐만 아니라, 전반적인 산업이나 문제현상에 대한 이해가 기반이 되어야한다는 것과 커뮤니케이션이 중요하다는 사실을 확인할 수 있었다. 실제 실습프로젝트를 진행할 때, 이 부분을 빠뜨리지 말고 준비해야겠다고 생각했다.
나는 고객의 행동과 액션을 기반으로 한 프로젝트를 설계하는 것에 관심이 있는데, 마찬가지로 고객의 행동을 좀 더 직관적으로 이해하기 위해서 어떤 자료(ex.클릭수, 노출빈도, 이탈경로 etc)를 활용할지, 실제 업계에서는 어떤 자료를 어떻게 활용하고 있는지 좀 더 살펴보고 싶어졌다.
데이터와 직관, 둘 중 하나에 더 치우쳐지기 쉽다고 생각하는데 적절하게 유지할 수 있도록 하는 경험과 사고능력을 앞으로 많이 길러나가고 싶다.
.
몇주동안.. 아무리 영상+구글링 해가면서 따라해봐도 워크벤치에서 실행이 안됐었다ㅜㅠ sql책을 대출해서 sql설치부터 차근차근 따라했더니 이제된다 !!
감격......😳!
.
SELECT customer_id
from orders
where amount >=2
SELECT *
from orders
where order_date > '2023-11-02'
and amount>=2
SELECT *
from orders
where shipping_fee>15000
and amount<3
SELECT *
from orders
order by shipping_fee desc
SELECT name,track
FROM sparta_student
아니다 <> , Unity 변수명에 ' ' 작은따옴표!!!
SELECT *
FROM sparta_student
where track <>'Unity'
IN(2021,2023)
으로 써야함SELECT *
FROM sparta_student
where enrollment_year in(2021,2023)
select *
from sparta_student
where track = 'Node.js'
and grade = 'A'
SELECT name
from team_projects
where aws_cost>=40000
year() => 연도 함수 사용
SELECT *
from team_projects
where Year(start_date)=2022
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')
lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
❌나는 order by decs를 써서 정렬만 했는데, 순위를 매기는 RANK()
를 써서 lol_rank값을 새로 만들어줘야했다
sql rank() over 함수
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
최종적으로 이렇게 작성해주면 '구구이'가 나온다.
SELECT name, rating, rank() over(order by rating desc) as lol_rank
from lol_users
order by region
✅group by 를 쓸지, order by를 쓸지 고민했는데..!!
SELECT region, avg(rating)
FROM lol_users
group BY region
SELECT *
FROM lol_feedbacks
order by satisfaction_score desc
SELECT user_name, Max(feedback_date)
FROM lol_feedbacks
group by user_name
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
SELECT feedback_date, avg(satisfaction_score) avg_s
FROM lol_feedbacks
group by feedback_date
order by avg_s desc limit 1
SELECT name
FROM doctors
where major='성형외과'
SELECT major, count(*)
FROM doctors
group by major
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);
🔻이 개념을 사용한 것 같다.
SELECT name, datediff(curdate(),hire_date) AS working_days
FROM doctors
SELECT gender,count(*)
FROM patients
group by gender
SELECT count(*)
FROM patients
where datediff(curdate(),birth_date) >=40*365
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'
SELECT count(*)
from departments

❌sql을 안본지 좀 됐더니 조인을 어떻게 쓰는지 헷갈려서 답을 보고 힌트를 얻었다 ㅠㅠ!
40.
'기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
SELECT e.name
FROM employees e INNER JOIN departments d
ON e.department_id = d.id
WHERE d.name = '기술팀'
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
SELECT d.name
FROM departments d LEFT JOIN employees e
ON d.id = e.department_id
WHERE e.id IS NULL
확실히 강의에만 있는 내용이 전부가 아니라, 문제를 많이 경험하면서 구글링을 통해 얻는 것도 학습의 굉장히 큰 부분인 것 같다.
테이블을 직접만들면서 해보니까 훨씬 몰입도가 있고 재밌었다.
달리기반...할 수 있을지.. 아직 자신이 없기는 한데
오늘처럼 차근차근 풀어나가야겠다 !!
내일도 화이팅 :)