197. Rising Temperature
▶ 문제 POINT : 전 일(yesterday) 값 가져오기
[문제]
Write a solution to find all dates' id with higher temperatures compared to its previous dates (yesterday).
→ 어제 대비 높은 온도의 id 찾기
[조건]
- 전일(yesterday) 값 컬럼 필요
- 전일 < 금일 조건으로 대소비교
▶ 문제 해결 & 피드백 POINT : lag 윈도우 함수 or join 조건 활용하여 이전 값 가져오기
[풀이 과정 1]
1. 전일 값 가져오기 : `join` 으로 연결
- join on 조건으로 전일자 값 연결 : `date_sub` 함수 활용
- where 절에서 대소 비교
- id 출력
SELECT w1.id
FROM Weather w1
INNER JOIN Weather w2 ON w2.recordDate = DATE_SUB(w1.recordDate,INTERVAL 1 DAY)
WHERE w1.temperature>w2.temperature
[풀이 과정 2]
1. 전일 값 가져오기 : `lag()over() 윈도우 함수` 활용
- 윈도우 함수 `lag` 로 전일자 /해당 값 컬럼 추가 생성
- 새로운 테이블 from 절 서브쿼리로 놓고
- 아우터 쿼리 where 절에서 대소 비교 & 연속된 날짜 일때만 출력 (`왜?` lag는 일자가 연속적이지 않아도(전일자가 아니여도) 상관없이 이전 행을 가져오기 때문
SELECT id
FROM (SELECT id
,recordDate AS today
,temperature AS to_t
,LAG(temperature,1) OVER (ORDER BY recordDate) AS yes_t -- 전일자값
,LAG(recordDate,1) OVER (ORDER BY recordDate) AS yesterday -- 전일자
FROM Weather ) AS a
WHERE to_t > yes_t -- 대소비교
AND DATEDIFF(today,yesterday)=1 -- 연속 일자 일때만 출력
1581. Customer Who Visited but Did Not Make Any Transactions
▶ 문제 POINT : 조인 방식 설정 과 집계
[문제]
Write a solution to find the IDs of the users who visited without making any transactions and the number of times they made these types of visits.
→ 방문 고객 중 결제 하지 않은 고객 id를 찾고, 그 건수 집계
[조건]
- 방문/ 결제 테이블 연결
- 거래 내역이 없는 id 와 그 건수 집계
▶ 문제 해결 & 피드백 POINT : left 조인으로 연결, null 행 집계
[풀이 과정 ]
1. 방문 내역은 있지만 거래 내역은 없은 visit_ id 출력 . (`left join` 으로 연결)
2. 거래 내역이 없는 고객만 집계 (`where` 절에서 `null` 일때만 필터링)
3. 건수 집계를 위해 group by & count
#방법1. 거래아이디가 null 인것만 집계
SELECT v.customer_id
,count(if(t.transaction_id is null,0,null)) as count_no_trans
FROM visits v
LEFT JOIN transactions t on v.visit_id=t.visit_id
where t.transaction_id is null
group by 1
#방법2.이미 where절에서 거래내역이 없는 고객을 필터링 해줬기 때문에 값이 있는 행아무거나 집계해도됨
SELECT v.customer_id
,count(visit_id) as count_no_trans
FROM visits v
LEFT JOIN transactions t on v.visit_id=t.visit_id
where t.transaction_id is null
group by 1
'SQL' 카테고리의 다른 글
코테 준비 | SOLVESQL 서울숲 요일별 대기오염도 계산하기 (DAYNAME/WEEKDAY/특정 조건으로 정렬하기 FIELD) (0) | 2024.12.11 |
---|---|
코테 준비 | SOLVESQL 게임 평점 예측하기1 (누락 정보 평균값으로 채우기 /coalesce) (1) | 2024.12.11 |
코테 준비 | 프로그래머스 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기/입양 시각 구하기(2) (1) | 2024.12.09 |
SQL 실습 | 결제 이상치 (STD 통계 함수) / 월별 증감률 계산 (재귀적 CTE) (0) | 2024.12.06 |
코테 준비 | 프로그래머스 취소되지 않은 진료 예약 조회/자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기 (3) | 2024.12.06 |