1. 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
select name
from practice5
where aws_cost>=40000
2. 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!
# 내풀이
select *
from practice5
where start_date like '2022%'
# 다른 정답풀이
select *
from practice5
where year(start_date)=2022
나는 year() 함수를 몰라서 like를 이용해서 풀었는데, 저렇게 년도, 월, 일 등을 반환해주는 함수가 있었다.
year(), month(), day(), hour(), minute(), second() 등이 다 가능!
3. 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
# 정답
select *
from practice5
WHERE CURDATE() BETWEEN start_date AND end_date
이 문제는 문제가 의미하는 바가 뭔지 잘 모르겠어서 못 풀었었는데,
날짜를 하드코딩한다는 표현은 오늘의 날짜를 직접 쳐서 쿼리하는 것을 의미한다고 한다.
즉, 오늘 날짜를 직접 치지 말고 지금 시점을 가져오는 함수를 이용하여 푸는 것.
curdate() 함수가 현재 날짜를 ‘YYYY-MM-DD’ 또는 'YYYYMMDD' 형식의 날짜 값으로 제공하는 함수라고 한다.
WHERE CURDATE() BETWEEN start_date AND end_date
따라서 이 부분 현재 날짜(curdate()가 반환하는 값) 가 start_date 와 end_date 사이에 있는지를 확인하는 조건을 나타낸다.
4. 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
# 내풀이
select name, substr(end_date, 9, 10) - substr(start_date, 9, 10) +1 "지속기간"
from practice5
# 정답풀이
SELECT name, DATEDIFF(end_date, start_date) AS working_days
FROM practice5
이 문제도 datediff()라는 함수를 알지 못해서 내 멋대로 풀었다.
날짜 기간이 같은 달에 시작하고 끝나서 저렇게 풀이 할 수 있던거고 월이 넘어갔으면 틀린 풀이이다.
그리고 지속기간이라길래 시작한 날과 끝난 날을 모두 포함하는거라 생각해서 1을 더했는데 아니었나 보다.
datediff()는 두 날짜 사이의 일 수를 반환해주는 함수이다.
datediff(a, b) 로 사용하고 a에서 b를 뺀 일 수를 반환해 주어서 만약 날짜 반대로 넣으면 음수가 나오게 된다.
사실 이번 연습문제는 푼지는 좀 되었는데, 모르는 함수가 많이 나왔어서 새로 찾고 정리하느라 포스팅은 늦었다.
새롭게 알게 된 함수들은 sql 기초문법에 추가해서 올려야겠다.
'문제풀이 > 스파르타 - sql 문제' 카테고리의 다른 글
[사전캠프] SQL 과제 | Lv2. 날짜별 획득포인트 조회하기 (0) | 2024.06.26 |
---|---|
[사전캠프] SQL 연습문제(7) (0) | 2024.06.26 |
[사전캠프] SQL 과제| Lv1. 데이터 속 김서방 찾기 (0) | 2024.06.12 |
[사전캠프] SQL 연습문제(6) (2) | 2024.06.07 |
[사전캠프] SQL 연습문제(4) (0) | 2024.06.04 |