SQLite 15

[TIL] 윈도우 함수에서 ROWS로 특정 범위내 데이터 지정하기 #SQL #SQLite #solvesql

solvesql - 전력 소비량 이동 평균 구하기👉 문제 바로가기(solvesql)-- 2017년 1월 1일 0시부터 2017년 2월 1일 0시까지-- 10분 단위로 3개 발전소 전력 소비량의 1시간 범위 단순 이동 평균을 계산-- 이동 평균 값은 소수점 셋째 자리에서 반올림SELECT DATETIME(measured_at, '+10 minutes') AS end_at, ROUND((AVG(zone_quads) OVER(ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW)),2) AS zone_quads, ROUND((AVG(zone_smir) OVER(ORDER BY measured_at ROWS BETWEEN 5 PRECEDING A..

DA Study/TIL 2025.03.06

[TIL] CASE WHEN을 활용해 SELECT절에서 데이터 필터링하기 #SQL #SQLite #solvesql

solvesql - 가구 판매의 비중이 높았던 날 찾기👉 문제 바로가기(solvesql)-- -- 일별 주문 수가 10개 이상인 날 중-- ‘Furniture’ 카테고리 주문의 비율이 40% 이상 이었던 날-- Furniture 카테고리의 주문 비율은 백분율로 계산하며, 반올림하여 소수점 둘째자리까지만 출력-- Furniture 카테고리의 주문 비율 내림차순, 날짜 순 정렬-- -- 1) 임시테이블 생성, 서브쿼리로 해결WITH tmp AS ( SELECT t1.order_date, t2.order_id, t2.category FROM (SELECT order_date FROM records GROUP BY order_date ..

DA Study/TIL 2025.03.02

[TIL] 윈도우 함수 DENSE_RANK()를 활용한 TOP N 데이터 추출하기 #SQL #SQLite #solvesql

solvesql - 레스토랑 요일 별 구매금액 Top 3 영수증👉 문제 바로가기(solvesql)-- 월별 TOP3 영수증 출력SELECT t1.day, t1.time, t1.sex, t1.total_billFROM (SELECT DENSE_RANK() OVER (PARTITION BY day ORDER BY total_bill DESC) as rnk, day,time,sex,total_bill FROM tips) t1WHERE t1.rnk in (1,2,3)[ 논리 과정 ]total_bill 기준으로 누적 순위 산출한 테이블 생성해당 테이블 서브쿼리로 요일별 TOP3 데이터만 조회[ 문제 상황 ]동점자를 같은 순위로 매기는 누적 순위를 산출해야 한다.해당 순위로 동점자까지 포함..

DA Study/TIL 2025.02.26

[TIL] 집계 함수와 연산 함수를 활용한 피어슨 상관계수 구하기 #SQL #SQLite #solvesql

solvesql - 펭귄 날개와 몸무게의 상관 계수👉 문제 바로가기(solvesql)-- 날개 길이와 몸무게의 피어슨 상관 계수(Pearson Correlation Coefficient)를 구하는 쿼리WITH avg_t AS( SELECT species, AVG(flipper_length_mm) as avg_length, AVG(body_mass_g) as avg_mass FROM penguins GROUP BY species)SELECT t1.species, ROUND((SUM((t1.flipper_length_mm - t2.avg_length)*(t1.body_mass_g-t2.avg_mass)))/ (SQRT(SUM(POWER((t1.flipper_le..

DA Study/TIL 2025.02.25

[TIL] 윈도우 함수를 활용한 누적합 구하기 #SQL #SQLite #solvesql

solvesql - 유량(Flow)와 저량(Stock)👉 문제 바로가기(solvesql)-- 연도별로 새롭게 소장하게 된 작품의 수-- 연도별 누적 소장 작품 수를 계산하여 조회SELECT STRFTIME('%Y', acquisition_date) as 'Acquisition year', COUNT(artwork_id) as 'New acquisitions this year (Flow)', SUM(COUNT(artwork_id)) OVER (ORDER BY STRFTIME('%Y', acquisition_date)) as 'Total collection size (Stock)'FROM artworksWHERE STRFTIME('%Y', acquisition_date) is not nullGRO..

DA Study/TIL 2025.02.24

[TIL] Null값과 연산하기 - COALESCE()활용 #SQL #SQLite #solvesql

solvesql - 폐쇄할 따릉이 정류소 찾기 2👉 문제 바로가기(solvesql)-- 2018년 데이터 테이블 생성WITH t_2018 AS(SELECT t1.station_id, t1.name, t1.local, CASE WHEN (COALESCE(t2.rent_count, 0) + COALESCE(t3.return_count, 0)) IS NULL THEN 0 ELSE (COALESCE(t2.rent_count, 0) + COALESCE(t3.return_count, 0)) END as 'count_18'FROM station t1LEFT OUTER JOIN (SELECT rent_station_id, COUNT(*) as rent_count FROM rental_histo..

DA Study/TIL 2025.02.23

[TIL] UNION과 UNION ALL의 차이 #SQL #SQLite #solvesql

solvesql - 친구 수 집계하기👉 문제 바로가기(solvesql)-- 데이터베이스에 포함된 모든 사용자에 대해 각 사용자의 친구 수를 집계해 출력WITH tmp_t AS ( SELECT user_id, SUM(num_friends) as num_friends FROM (SELECT user_a_id as user_id, COUNT(DISTINCT user_b_id) as num_friends FROM edges GROUP BY user_a_id UNION ALL SELECT user_b_id as user_id, COUNT(DISTINCT user_a_id) as num_friends FROM edges GROUP BY user_b_id) GR..

DA Study/TIL 2025.02.21

[TIL] CASE WHEN 구문으로 PIVOT 테이블 만들기 #SQL #SQLite #solvesql

solvesql - 지역별 주문의 특징👉 문제 바로가기(solvesql)-- 자역별, 특정 카테고리별 주문 건수SELECT t1.region as Region, COUNT(DISTINCT t1.Furniture) as 'Furniture', COUNT(DISTINCT t1.Office_Supplies) as 'Office Supplies', COUNT(DISTINCT t1.Technology) as 'Technology'FROM (SELECT region, CASE WHEN category == 'Furniture' THEN order_id END as 'Furniture', CASE WHEN category == 'Office Supplies' THEN order_id END..

DA Study/TIL 2025.02.20

[TIL] 문자열 슬라이싱, 문자열 나눠서 조회하기 #SQL #SQLite #solvesql

solvesql - 전국 카페 주소 데이터 정제하기👉 문제 바로가기(solvesql)-- 주소(address) 컬럼값을 시도, 시군구로 나누어 조회SELECT substr(address, 1, instr(address, ' ') - 1) AS sido, substr(substr(address, instr(address, ' ') +1), 1, instr(substr(address, instr(address, ' ') +1),' ') - 1) AS sigungu, COUNT(cafe_id) as cntFROM cafesGROUP BY substr(address, 1, instr(address, ' ') - 1), substr(substr(address, instr(address, ' ') +1..

DA Study/TIL 2025.02.17

[TIL] 집계함수 중복처리(DISTINCT) #SQL #SQLite #solvesql

solvesql - 복수 국적 메달 수상한 선수 찾기👉 문제 바로가기(solvesql)-- 2000년 이후의 메달 수상 기록만 고려했을 때, 메달을 수상한 올림픽 참가 선수 중 2개 이상의 국적으로 메달을 수상한 기록이 있는 선수의 이름을 조회SELECT t3.nameFROM records t1, games t2, athletes t3WHERE t1.game_id = t2.id AND t1.athlete_id = t3.id AND t2.year >= 2000 AND t1.medal IS NOT NULLGROUP BY t1.athlete_idHAVING COUNT(DISTINCT t1.team_id) >= 2ORDER BY t3.name[ 논리 과정 ]2000년 이후 기록만 남긴다.메달..

DA Study/TIL 2025.02.13