💥 CODEKATA
https://www.notion.so/teamsparta/SQL-23a2dc3ef51480bdb42ad77c293b0705
기억에 남는 문제들만 기재
그냥 오전내내 풀었음
=>
name이 중복일 경우, datetime이 최근 날짜가 위로 출력되게끔 해야 했음
파이썬일 경우의 문법밖에 생각나지 않아서 지피티의 도움을 받음
case when을 order by 에도 쓸 수 있다는 것을 알았음 !
그리고 중복값일 경우에는 파이썬의 문법 == 을 생각했는데, count로 이름마다 갯수를 세어서 1개가 넘는 경우는 중복값임을 찾아내는 것이었음
🔰 PARTITON BY [컬럼명]
컬럼 내 순위 및 집계
select animal_id, name, datetime
from animal_ins
order by name,
case when count(1) over(partition by name) > 1
then datetime end desc,
case when count(1) over(partition by name) = 1
then datetime end
### 1차 코드
### count가 user_id 당 갯수를 세어서 1 1 1 1 이렇게만 출력이 됨
SELECT user_id, age, joined, count(user_id) as users
from user_info
where joined like '2021%'
group by user_id
having age between 20 and 29

### 2차코드 - 정답
### 그래서 처음 count를 빼버리고 서브쿼리로 묶은 후, 서브쿼리 밖에서 count 세는걸로 수정함
select count(a.user_id) as users
from (
SELECT user_id, age, joined
from user_info
where joined like '2021%'
group by user_id
having age between 20 and 29
) a

추가 문제) solveSQL
Q. 당일의 미세먼지 농도보다 바로 다음날의 미세먼지 농도가 더 안좋은 날 찾기
=>
얘는 좀 헤맸다.
measured_at 이 오리지널 날짜였는데, 여기다가 + 1day 만 하고 싶어서 date_add 함수를 썼는데 계속 오류가 남.
원인은 measured_at 컬럼 데이터 타입이 date 가 아니라서 그랬던 것 같음.
🔰 DATE (첫번째 인자, modifier, ...)
첫번째 인자로 주어진 시간값을 날짜 형식(YYYY-MM-DD)로 변환
modifier를 적용한 뒤 날짜를 반환
day, month, year 더하기/빼기 가능
ex) date(testdate, '+1 month', '+10 day') => 한달 + 10 일 더한 날짜 반환
select m1.measured_at as today, m2.measured_at as next_day,
m1.pm10, m2.pm10 as next_pm10
from measurements m1
join measurements m2 on m1.station = m2.station
and date(m1.measured_at, '+1 day') = m2.measured_at
where m2.pm10 > m1.pm10

'Sparta > CODEKATA' 카테고리의 다른 글
| [250819] 스파르타코딩 본캠프 11일차 (2) (0) | 2025.08.19 |
|---|---|
| [250818] 스파르타코딩 본캠프 10일차 (2) (4) | 2025.08.18 |
| [250814] 스파르타코딩 본캠프 9일차 (2) (4) | 2025.08.14 |
| [250811] 스파르타코딩 본캠프 6일차 - 사전캠프 퀘스트 SQL 달리기반 (6) | 2025.08.11 |
| [250807] 스파르타코딩 본캠프 4일차 - 사전캠프 퀘스트 SQL 걷기반 (4) | 2025.08.07 |