인사말
안녕하세요~ 다들 주말 잘 보내셨나요?
한 주의 시작을 알리는 월요일이 다가왔습니다!
월요일이 제일 집중이 안 되는 날인 거 같아요 ㅠㅠ
그래도!
오늘도 공부를 했기 때문에, 공부한 내용을 포스팅하도록 하겠습니다.
문제 1. 테이블에서 AWS 예산이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
select name from project where aws_cost >= 40000;
select 칼럼명 from 파일명 where 조건이 들어가는 열 >= 40000;
이제는 작문하는 데에 조금 익숙해져서, 아는 게 나온다면 문제를 분석하게 되더라구요
문제를 잘 읽어보면 작문을 어떻게 해야 할지 대충 짜여집니다!
"AWS 예산, 40000 이상, 프로젝트들의 이름을 선택"에 집중하여 작문해주었습니다!
문제 2. 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!
select name from project where start_date not like '2023%';
select 컬럼명 from 파일명 where 조건이 들어가는 열1 not like '2023%';
처음에는 이렇게 작성을 하고, 팀원분들과 대화를 나눴을 때 다른점을 발견했습니다!
select * from team_projects where start_date like '2022%' ;
2022년이 하나이기 때문에 "like"로도 표현할 수 있다는 점을 배워갔습니다!
문제 3. 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
수정 전
select name from project where start_date < '2023-11-18' and end_date > '2023-11-18';
수정 후
select * from team_projects where start_date <= current_date() and end_date >= current_date();
이번에도 제가 몰랐던 단어가 나왔습니다.
바로 "하드코딩"이라는 건데요!
하드코딩이란?
데이터를 소스 코드 내부에 직접적인 형태로 입력하는 것을 의미합니다.
제가 수정 전에 '2023-11-18'를 직접 썼던 게 하드코딩이라 할 수 있는 거죠!
그리하여
팀원들과 대화 끝에 "current_date"가 오늘 날짜를 의미한다는 것을 배우고,
적용하여 수정하였습니다!
새로운 걸 많이 배워가는 오늘이네요!
문제 4. 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
select datediff(end_date, start_date) as "프로젝트 지속 기간 일 수" from project;
막혔습니다!
여기서 30분 이상을 고민하고 있었어요!
인터넷에서 찾아보아도 뭐라는 건지 이해가 되질 않더라구요
그래서
팀원분들께 "datediff"를 찾았는데 어떻게 작성해야 하는지 모르겠다고 물어보고
해결하였습니다!
datediff(컬럼명1, 컬럼명2) 이렇게 써야 하더라구요
저는 그것도 모르고 날짜로 적고 있어서 나오지 않았던 거였습니다. 🤣
그리고!
datediff에 있는 컬럼명1의 값이 컬럼명2보다 작을 시, 마이너스 값이 나온다고 하더라구요
직접 해봄으로써 눈으로 확인하였습니다!
5번째 퀘스트의 마무리
오늘은 DATEDIFF(end_date, start_date)과 current_date() : 오늘 날짜를 새롭게 알게 된 퀘스트였습니다!
알아갈 수 있고 알아야 하는 작문이 많아서 너무 재밌습니다!
언젠가 자연스럽게 우다다다 작성하고 있는 제가 있겠죠? 😋
오늘의 마지막 공부인 6번째 퀘스트 포스팅, 시작합니다!
문제 1. 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
select name, region, rating, rank() over(order by rating desc) as "순위"
from lol;
"레이팅 순위를 계산하는 쿼리", "전체 지역 기준", "순위는 레이팅이 높을수록 높아야 한다."
문제에서 힌트를 얻어서 작문을 완성하였습니다!
그리고 새롭게 알게 된 표현!
"rank() over(order by 컬럼명 desc)"입니다.
컬럼명을 기준으로 높은 순으로 랭크를 매겨준다는 작문이었습니다!
문제 2. 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요.
select name
from lol
where join_date = (select max(join_date) from lol);
너무 어려웠습니다..
어떻게 해야 할지 모르겠더라구요
"가장 늦게 게임을 시작한 유저의 이름"
'가장 늦게..?'에서 조금 생각이 멈췄습니다.
그러다 최근에 SQL의 강의를 들었는데 Min과 Max의 내용이 있었거든요!
그래서 그걸 쓰면 되겠다! 싶었지만 작문을 어떻게 해야할지 모르겠더라구요
팀원분들과 대화를 나눈 후 작성할 수 있게 된 문제였습니다!
where join_date = (select max(join_date) from lol);
문제 3. 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
select name, region, rating, rank() over(order by region, rating desc) as "순위"
from lol;
"지역별로", "레이팅이 높은 순", "정렬하여 나열"
앞서 문제 1번에서 배웠던 표현을 기반으로 조건을 더 추가해주었는데
되더라구요!! 쾌감 쩔었던 문제였습니다.
문제 4. 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
select region, avg(rating) as "지역별 평균 레이팅"
from lol
group by region;
"지역별", "평균 레이팅"
문제에서 힌트를 얻고, "지역별"이라는 조건 그룹이 있기 때문에 "group by"를 활영하여 완성하였습니다.
또한, 평균값을 구할 때 SQL 강의를 보면서 배웠던 "avg(컬럼명)"도 활용할 수 있어서 좋았습니다!
마무리
오늘도 월요일을 알리며 퀘스트 2가지를 완료하였습니다!
여전히 모르는 문장이 많아서 어려웠고 헤매었습니다!
그래도 팀원들과 논의 끝에 해결해낼 수 있어서 좋았습니다
모르는 게 산더미라서 막막하지만 점점 없앨 수 있다는 사실도 있기에
오늘도 행복하고 즐거웠던 배움이었습니다!
감사합니다 😊
<새로 배운 것들>
1. 하드코딩 : 데이터를 소스 코드 내부에 직접적인 형태로 입력하는 것
2. current_date() : 오늘 날짜
3. DATEDIFF(컬럼명1, 컬럼명2) : 일수 계산
4. over(order by (열 이름) DESC) : 정렬하여 나열
5. rank(칼럼명) : 순위 매기기
6. 컬럼명 = (select max(컬럼명) from 파일명); : 컬럼명에 대한 최댓값 혹은 최근값
'🔥 공부 > SQL 공부' 카테고리의 다른 글
[SQL] 내일배움캠프 퀘스트 8일차_ 9)와 10) (2) | 2024.11.20 |
---|---|
[SQL] 내일배움캠프 퀘스트 7일차_ 7)과 8) (0) | 2024.11.19 |
[SQL] 내일배움캠프 퀘스트 5일차_ 3)과 4) (3) | 2024.11.15 |
[SQL] 내일배움캠프 퀘스트 4일차_ 2) 이제 좀 벌었으니 flex 한 번 해볼까요?! (1) | 2024.11.14 |
[SQL] 내일배움캠프 퀘스트 3일차_ 1) 돈을 벌기 위해 일을 합시다! (1) | 2024.11.14 |