[내일배움캠프 사전캠프] ADsP 첫걸음, SQL 스터디

sleekstar·2025년 4월 29일
post-thumbnail

ADsP: 데이터 분석 준전문가.

1주차 강의자료

데이터의 정의: 저장이나 처리에 효율적인 형태로 변환된 정보

데이터의 유형: 정성적 데이터 · 정량적 데이터 / 정형 데이터 · 비정형 데이터 · 반정형 데이터

지식의 구분: 암묵지와 형식지 / 상호작용 (표출화-연결화-내면화-공통화)

DB<>DBMS(DataBase Management System)

데이터베이스의 종류: 관계형 데이터베이스(RDB) · 비관계형 데이터베이스(NoSQL)

데이터베이스의 일반적 특징&다양한 측면에서의 특징

기업내부 데이터베이스=> OLTP(데이터 갱신 위주)에서 점점 OLAP(모아둔 데이터 조회, 분석 중심)으로 변화.

*용어 정리: CRM(고객관계 관리), SCM(공급망관리), BI(비즈니스 인텔리전스), ERP(경영 자원 통합관리), RTE(실시간 기업), KMS(지식경영시스템), BSC(균형성과관리), EAI(기업 어플리케이션 통합), EDW(데이터웨어하우스)

산업부문별 데이터베이스 발전 과정: 제조 부문/ 금융 부문/ 유통 부문 구분하여 챙기기

수강 소감

확실히 ADsP 강의는 이론 위주 수업이라, 코딩 지식이 부족한 나는 SQLD도 병행하여 준비하는 것이 힘들더라도 발전에 더 도움이 될 것 같다.
SQL 역량이 한참 부족하다고 생각된다. 내일은 SQLD 강의를 수강해보고, 앞으로의 학습 로드맵을 짤 생각이다.

점점 복잡해지는 SQL...구글아 도와줘

코딩 스터디 (1)

팀 프로젝트 열심히 했으니 다시 놀아볼까요?!
rank() over 함수를 까먹었다.
rank() over(order by column) 정렬 기준에 따라 각 행에 순위를 부여하는 윈도우 함수.
단순 번호 매기기가 아니라 동점자 처리도 가능하다.
예를 들어, 2명이 공동 1등이면 둘 다 1등으로 출력되고, 다음은 3등부터 시작한다.

limit: 출력 행을 제한. MySQL 특유의 문법이라고 한다. 다른 DBMS에서는 작동하지 않을 수도 있다고 함.

코딩 스터디 (2)

랭크게임 하다가 싸워서 피드백 남겼어요…
*keyword: group by

  1. lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
    =>해당 쿼리 작성에 group by가 왜 필요한지 이해가 되지 않았다. group by절에 대한 이해가 아직 부족한 듯하여, 오늘은 해당 문법을 위주로 용례를 더 찾아보았다.

가장 중요한 것: 작성 프로세스를 단계별로 나누어 생각하는 것 아닐까?

이 경우에도 작성 프로세스는 1. 고객별 피드백 수 집계(그래야 순위를 매길 수 있으므로), 2. 상위 3명 추출이다. '~별로 집계'할 때는 group by가 필수라고 한다.

GROUP BY + COUNT() 조합은 가장 기본적인 집계 패턴
ORDER BY COUNT() DESC 형태로 정렬하면, 상위 사용자나 인기 항목 추출에 매우 유용

두 가지를 알 수 있었다. 자주 쓰이는 패턴이 체화될 수 있도록 쿼리를 실제로 작성하는 연습을 많이 해봐야겠다.

29.lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
=> 이 문제 관련해서,

select feedback_date
from lol_feedbacks
group by feedback_date
order by avg(satisfaction_score) desc limit

위와 같은 코드를 작성할 수 있지만, 다음과 같은 이유들 때문에 일부 DBMS에서는 오류가 날 수 있다고 한다;
1. select절에 avg(satisfaction_score)가 없으면서, 2. order by에 avg()를 사용하고 있기 때문에 표준 SQL에는 어긋난다.
그래서 서브쿼리를 사용한 버전을 알아보았다.

SELECT feedback_date
FROM (
    SELECT
        feedback_date,
        AVG(satisfaction_score) AS avg_score
    FROM lol_feedbacks
    GROUP BY feedback_date
) AS avg_table
ORDER BY avg_score DESC
LIMIT 1;

서브쿼리는 참 어렵다. 그렇지만 복잡해 보이더라도 본질적으로 수학의 괄호와 비슷하다는 점을 상기하고, 계속 사용하는 버릇을 들여야겠다.

아쉬웠던 점

코딩 스터디할 때 아쉬운 점은, 직접 프로그램을 돌리는 것이 아니다보니 다른 방식으로 작성해보았을 때 이 또한 괜찮은 것인지 판단하기 어렵다는 것이다. 그래도 팀원들과의 소통을 통해 도움을 얻을 수 있었다.

profile
기록용

0개의 댓글