[25.02.18]본캠프2일차 코드카타+아티클스터디+직무스터디(팀)+sql달리기반 Lv7

김명서·2025년 2월 18일
1

TIL_sparta

목록 보기
21/60

알고리즘 코드카타

  1. 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
SELECT name
from  animal_ins
order by datetime
limit 1
  1. 동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT datetime
from  animal_ins
order by datetime
limit 1
  1. 동물 보호소에 들어온 동물 중 젊은 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT animal_id,name
from animal_ins
where intake_condition<>'aged'
order by animal_id
  1. 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
SELECT animal_id, name, datetime
from animal_ins
order by name, datetime desc

💡기억해두어야할 것
ORDER BY 뒤에 여러 개의 컬럼을 나열하면 앞에 있는 컬럼부터 우선적으로 정렬한 후, 앞의 컬럼 값이 같을 경우 다음 컬럼을 기준으로 정렬한다.
order by name, datetime desc 이렇게 작성할 경우 name은 오름차순, datetime은 내림차순 정렬된다.

  1. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요.
SELECT animal_id, name
from animal_ins
where animal_type='dog'
and name like '%el%'
order by name
  1. USER_INFO 테이블에서 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 USERS로 지정해주세요.
SELECT count(user_id) users
from user_info
where age is null
  1. PRODUCT 테이블에서 판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정해주세요.
SELECT max(price) max_price
from product
  1. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.
SELECT animal_type
, ifnull(name, 'no name') name
, sex_upon_intake
from animal_ins
order by animal_id
SELECT animal_type
, case
        when name is null then 'No name'
        else name
        end name
, sex_upon_intake
from animal_ins
order by animal_id

둘 다 정답 O!
❌몇번 틀렸었는데 -> 이유는 'no name'으로 소문자로 써서였다..;
조건을 잘 지켜주자 ~!
그리고 ifnull 에서 문자로 반환하는 경우 ⭐작은따옴표 !!⭐ 명심!!

  1. FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.
SELECT warehouse_id, warehouse_name, address
, ifnull(freezer_yn, 'N') FREEZER_YN
from food_warehouse
where address like '경기%'
order by warehouse_id
  1. FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요
SELECT factory_id, factory_name, address
from food_factory
where address like '강원%'
order by factory_id
  1. ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
    시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요. ↩
SELECT animal_id, name, date_format(datetime,'%y-%m-%d') '날짜'
from animal_ins
order by animal_id

이용한 함수
📌 DATE_FORMAT() 함수 기본 개념
DATE_FORMAT() 함수는 MySQL에서 날짜(DATE 또는 DATETIME) 값을 특정 형식으로 변환할 때 사용된다.

🔻기본 문법

DATE_FORMAT(datetime_column, '형식')

.
.

아티클스터디

오늘의 아티클
데이터 시각화는 왜 중요할까?
.

  • 요약 : 데이터 시각화 사례
    1) 네이버 지도
    ➡ 노선정보, 총 소요시간, 경로별 소요시간, 경로의 위치정보 등을 시각요소로 매핑

  • 2)기상청 ’힌남노’ 예상 이동 경로
    ➡ 예상 이동 경로, 태풍 강도를 중심으로 기타 기상정보와함께 지도에 직관적으로 표현

이 외에도, 코로나 바이러스 확진자 현황, 선거 결과를 알려주는 다양한 차트 등 시각화된 자료를 바탕으로 의사결정을 내리고 있음.

.

  • 주요 포인트 : 시각화를 하는 이유
    • 시각정보는 쉽게 알 수 있다.
      인체 감각마다 시간 당 처리할 수 있는 정보의 양이 많은 차이를 보임
      <덴마크의 물리학자 Tor Norretranders>
      출처즉, 인식하는 부분에 비해 훨씬 많은 양의 정보를 시각을 통해 처리하고 그 정보를 알아차리고 있음. 그리고 시각적인 부분 텍스트vs그래픽 중에서도, 3M과 소셜미디어 사이언티스트 연구에 따르면, 그래픽 처리가 더 빠름을 알 수 있음.
    .
    • ‘아하’순간을 통해 인사이트를 발견하다
      데이터가 시각화되어 전달되면 우리 뇌는 빠른 속도로 많은 양의 정보를 처리할 수 있음.
      [미국인들이 하루를 어떻게 보내는지]
      💡각 활동은 카테코리별로 나누어 고유한 색으로 정의하고, 할애 시간을 면적으로 보여줌. ⇒ 데이터 테이블만으로는 찾기 어려운 많은 정보를 직관적으로 이해하고, 패턴을 찾고, 인사이트를 발견해낼 수 있도록 도움
      [수감 비용과 수감 지역]
      💡각 범죄자의 수감비용을 그들이 사는 지역에 매핑 → 비용이 높을 수록 붉은 색이 강조되도로록 디자인.
      따라서, 한눈에 특정 지역에 수감 비용이 집중 된 것을 알 수 있었고 이러한 지역들에 공통적으로 교육 등의 공공자원이 많이 부족한 지역이라는 인사이트까지 도출할 수 있게함.
      .

    • 의사결정에 도움
      1.시각화는 많은 양의 데이터와 정보를 담을 수 있다.
      2.이해하는 데 특별한 과학이나 통계 등의 교육이 필요하지 않다.
      3.우리 뇌는 시각화된 정보를 처리하는 데 탁월하다.
      4.흥미로운 디자인으로 주제에 대한 관심을 끌고 집중을 보다 오래 유지할 수 있다.

      실제 의사결정에 도움을 준 사례_2가지
      🔻
      🔑전염병의 원인을 알린 고스트맵
      💥연구결과임에도 불구하고 주장이 무시되어왔었는데, 일종의 시각화를 통해 사람들에게 패턴을 쉽게 파악하게 하므로써 정부 당국의 의견을 바꾸는 데 성공했다는 점이 매우 인상적이었음.
      🔑코로나 바이러스 시뮬레이션
      오바마 대통령까지 시각화 자료를 사용하며,
      사회적 거리두기에 도움을 줌

      .

      • 일상 속 데이터 시각화의 중요성
        위와 같은 이점들을 가지고 있지만 이를 녹여내기 위해서는, 시각요소로 매핑되는 과정이 적절하게 디자인 되는 것이 중요⭐

        .
        .

핵심 개념 및 용어 정리

  • 핵심 개념 : 데이터 시각화*, 매핑**
  • 용어 정리 :
    *: 데이터에서 발견한 정보를 시각적으로 이해할 수 있도록 그래픽 형태로 표현한 것,
    **: 어떤 값을 다른 값에 대응시키는 과정

.
실무 적용 사례

  • 실무 적용 : 이커머스 플랫폼- 고객 구매 행동

  • 관련 사례 : 쿠팡, 컬리 cx 스코어 지표

  • 가상 시나리오 :
    🔻고객 구매 경로 분석
    고객이 어떤 경로를 통해 제품을 찾고, 장바구니에 담은 후 왜 구매하지 않는지 문제점 파악 ➡✅주요 이탈 지점을 파악하여 개선 포인트 도출

    🔻사용할 데이터 :

    • 로그 데이터 (페이지 탐색 경로, 머문 시간, 클릭 패턴)

    • 장바구니 추가 후 결제 완료 여부

      🔻시각화 플랜:

      1. 파이프라인 분석 (Funnel Analysis)
      • 방문 ➝ 제품 클릭 ➝ 장바구니 담기 ➝ 결제 단계별 이탈률 시각화
      1. 히트맵 (Heatmap)
      • 사용자들이 제품 페이지에서 가장 많이 클릭하는 부분 분석


팀스터디- 직무스터디

어제 내가 제안드린 목차에 맞춰 각자 내용을 재구성하는 시간을 가졌다.

- 목차 구상
1.데이터 집중직무
-필요역량
-수행업무
-채용공고

(1-1. 데이터분석가 in 연서님 도메인
1-2. 데이터분석가 in 대준님 도메인) 

2.데이터 활용직무

2-1
PM
-필요역량
-수행업무
-채용공고

2-2
퍼포먼스 마케터
-필요역량
-수행업무
-채용공고

3. 집중직무와 활용직무의 공통점,차이점(간단 마무리용)

여러 번의 조율회의를 거쳐, 발표에 쓰일 자료를 최종적으로 취합했다.(구글독스작업)

저녁 개인스터디

사전캠프때 못풀었던 퀘스트 sql 달리기반 7번문제에 도전해보기로 했다.

1번.
각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요.
a.
출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다.

답안처럼 서브쿼리를 사용해서 푸는 풀이

select e.name, e.department, e.salary
from employees e
where e.salary = (
				select max(salary)
                from employees e2
                where e2.department=e.department
                );

근데, 궁금증이 생겼다.

  1. 서브쿼리 안에 select 로 e.2 department를 불러오지 않아도 where절에 작성할 수 있나?
  2. 해당 where절이 의미하는 것이 무엇이지?

-> 바로 슬랙 질문방에 질문했다.
💥튜터님 답변
1/
서브쿼리는 Employees e2 테이블에서 실행되므로 e2.Department는 이미 존재하는 컬럼이다. 그래서 굳이 SELECT 절에서 가져오지 않아도 WHERE 조건에서 사용할 수 있는 것이다.(내가 너무 1055 오류 속에 갇혀있었던 것 같다 ㅠ)

2/
이 조건은 같은 Department에 속한 직원들끼리 비교하라는 뜻이다.
e.Department에 해당하는 Department에서 MAX 급여를 찾도록 제한하는 역할을 해주고,
이걸 빼면 돌리면 전체 Employees 중에서 MAX 급여를 찾는 쿼리가 되어버린다.
.
.
gpt가 with 를 이용해서도 풀 수 있다고 해서 풀어봤다 (서브쿼리가 효율적인 것 같긴하다)

with max_salary as (
select max(salary) salary, department
from employees 
group by department
)
select e.name, e.department, e.salary
from employees e
join max_salary ms
on e.department=ms.department and e.salary=ms.salary

🔻풀이

  • WHERE 절에서 서브쿼리를 사용해 각 부서의 최고 월급을 계산한다.⭐⭐⭐
  • 메인 쿼리에서는 각 직원의 월급이 해당 부서의 최고 월급과 일치하는 직원들만 필터링하여 결과에 포함시킨다.
    .
    .
  1. 직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요.
    a.
    출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.
select e.name, p.projectname, p.budget
from employeeprojects ep
join projects p
on ep.projectid=p.projectid
join employees e
on ep.employeeid=e.employeeid
where p.budget>=10000


마지막에 정렬조건은 보기좋으라고 내 맘대로 넣었다

🔻풀이

  • JOIN을 사용해 직원, 프로젝트 참여, 프로젝트 테이블을 결합한다.
  • WHERE p.Budget >= 10000을 사용해 예산이 10,000 이상인 프로젝트만을 필터링한다.
  • 서브쿼리를 사용하지 않았으나, 서브쿼리가 필요하지 않은 문제의 요구사항을 충족한다.
    .
    .
    .

느낀점 & 내일계획

개인적으로 체감상 Lv6.보다는 쉬웠던 느낌이다. 그치만 여전히 좀 긴 쿼리면 기본구조더라도 막힐때가 있으니 !! 얼른 쿼리를 파바바ㅏ박 써내려갈 수 있는 사람이 되고싶다 !
직무 분석을 해보면서 느낀 점은.. 3년 이상, 5년 이상의 경력직을 뽑더라.. 그럴만도 한게 pm이라는 직무상 당연한 것 같기도 하다. 이쪽으로 인턴이나 어시스트 업무도 추후에 자세히 찾아봐야겠다.
내일 첫 라이브 세션인데, 기대가 된다 ! 그래서 조금 일찍 코드타카를 시작하려한다. (평소보다 좀 더 일찍 일어날 수 있겠지 ? ㅎㅎ)
아티클 스터디 주제도 흥미로웠다 !
💭그리고 마지막 느낀점은, 나.. 점점 질문 공포증을 극복하고 있는 것 같다. 오늘 당당히 슬랙 질문방에 질문을 남겼었는데, 튜터님께서 너무너무 친절하고 명확한 답변을 주셨다 (튜터님 이력이 어마무시하다..) 이제 나름 모르는 것이 생기면 자책하거나 당황하지 않고, 구글링을 하고 있는 나를 발견하는 순간이 많아진 것 같다. 오늘도 성장한 점을 찾은 것 같아 뿌듯하다!

내일 계획 ✔
~9:50 알고리즘 코드타카
~10:00 데일리스크럼
10:00~ sql 라이브 세션
14:00~ 오후 개인 스터디/과제
18:00~ 저녁 개인 스터디
~20:20 데일리스크럼
~21:00 TIL 작성

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

0개의 댓글

관련 채용 정보