본문 바로가기

데이터 분석

(29)
[MYSQL] 1280. Students and Examinations / 카티션 곱(행렬 곱)/복합키 조인 꽤 머리를 앓았던 문제. 시작해보자 >>문제 : 테이블이 세개이다. 1) [Student]테이블 : 학생번호 + 학생이름 2) [Subject]테이블 : 학교에서 진행하는 모든 과목 3) [Examination]테이블 : 학생이름 + 시험친 과목 >>문제설명 각 학생이 각 과목에 응시한 시험의 횟수를 구하시오 (만약 시험에 응시하지 않았다면 0 출력) >>예시 students subjects examination >>예시 출력결과 어려웠던 점 : 응시하지 않은 시험은 0처리 (join 시 null이 되어야 하나?) 풀이과정 step1. 학생-과목별 응시횟수 구하기 여기서 group의 기준이 되는 값은 단순 학생 혹은 과목이 아닌 학생-과목이다. 따라서 학생-과목의 두 가지 기준으로 group by 를 해..
[MYSQL] 1321. Restaurant Growth/ lag 행을 통한 유동적인 누적합 >>문제 설명 테이블 : Customer customer_id : 소비자 식별번호 name : 소비자 이름 visited_on : 방문날짜 amount : 구매량 당신은 식당 관리자로써 앞으로의 각 날짜의 소비량을 예측하고자 한다. 예측 소비량은 : (오늘 소비량 + 이전 6일간의 소비량 누적합) /7로 계산한다. (이동평균법) 단, 각 날짜에는 여러 손님이 방문할 수 있다. 예시) 1/7일 예측량 : 1/1~1/7일 소비량의 평균 => 122.86 1/8일 예측량 : 1/2~1/8일 소비량의 평균 => 120 1/9일 예측량 : 1/3~1/9일 소비량의 평균 => 120 1/10일 예측량 : 1/4~1/10일 소비량의 평균 => 142.86 step1.날짜별 소비량 구하기 +num행 생성 자세히 보면 ..
[MYSQL] 1204. Last Person to Fit in the Bus >> 문제 컬럼 정보 Person_id : 개인 식별 번호 person_name : 사람 이름 weight : 몸무게 turn : 버스에 탑승할 순서 조건 - 버스에는 turn순서별로 탑승함 - 버스 승차 제한 중량은 1000kg임 (중량 누적합이 1000kg이면 더 타면 사고남) 출력 - 마지막에 탄 운좋은 친구의 이름은? >>예시 => 누적합이 딱 1000이 되는 john Cena친구가 마지막 탑승자 문제풀기 1단계: 누적합 테이블 만들기 - turn으로 오름차순해줌 - 중량을 차례대로 더해나감 >> 출력값 : 본래 컬럼 + 누적 중량합 2단계: 1000까지만 컷하기 - 위의 테이블을 from 서브쿼리로 넣음 - where 조건절에 1000이하로 잡아줌 >> 출력값 : 위의 테이블에서 누적 중량이 1..
[SQLite] 폐쇄할 따릉이 정류소 찾기1 / join 키 값 불일치 설정 >> 문제 => 어려운 수학공식 구현으로 난이도를 높이는 문제는 좋지 않다고 생각 => 정답 코드 => 수학 공식 구현은 구글링 참고 => where 조건 절 : 거리가 300m이하 => 각 station_id 별로 300m이하인 정류소가 5개 이상 => 중요하고 기억하고 싶은 것 join 키값이 일치조건만 있는 것이 아니라, 불일치 조건을 쓸 수 있음 => left join station as s_near on s.station_id != s_near.station_id => SQLite는 != => MYSQL은
[MYSQL] 550. Game Play Analysis IV / WITH절 임시 테이블 Table : - 기본키 : player_id, event_date - 이 테이블은 플레이어들의 게임플레이 기록을 뜻함 - 각 행은 플레이어가 로그인한 기록이며 games_played는 게임을 플레이한 개수가 적혀져 있음(0일 수도) ex) >> 문제 => 로그인한 첫날로부터 최소 이틀 연속 접속한 이들의 비율을 구하시오 => 문제 해석 주의점 : 2틀 연속인 경우가 하루라도 있는 사람을 출력하는 것이 아님 : 로그인한 첫날로부터 2틀연속 접속한 사람을 출력하는 것 ex) player1 player2 1-7 1-7 1-8 1-9 6-25 1-10 => player1 : 첫 로그인(7)-8일 연속이므로 조건 만족 => player2 : 9-10일이 연속되나 첫 로그인 기록인 7일 다음이 아니므로 조건 불만..
[MYSQL] Interviews /차근차근 결합하기 >> 문제 Samantha interviews many candidates from different colleges using coding challenges and contests. Write a query to print the contest_id hacker_id name the sums of total_submissions total_accepted_submissions total_views total_unique_views for each contest sorted by contest_id. Exclude the contest from the result if all four sums are 0. Note: A specific contest can be used to screen candida..
[스크랩 ] MYSQL - DECODE함수 # Decode 함수 정리 프로그래밍의 switch문 역할을 함 예를 들어 switch(a) case 1: 결과1 case 2 : 결과2 라는 프로그래밍 문은 SQL에서 DECODE(a, a=1, 결과1, a=2, 결과2)로 사용가능함 DECODE(컬럼명, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3, ....) # example DECODE(연예인, '유재석', '놀면뭐하니', '강호동', '아는형님','프로그램X') 이 예에서 DECODE함수는 연예인이 유재석이면 '놀면뭐하니'를 반환하고 강호동이라면 '아는형님'을 반환하며 유재석과 강호동이 아닌 연예인은 '프로그램X'를 반환한다. 출처 : https://computer-science-student.tistory.com/242
[MYSQL] SQL Project Planning / 2가지 풀이 >> 문제 => Project table이 주어지고, task_id, start_date, end_date가 주어짐 => start_date와 end_date의 차이는 무조건 1로 고정되어 있음 => 만약 end_date가 연속된다면 => 이건 같은 프로젝트임 => 각 프로젝트의 start_date와 end_date를 구하시오 => 프로젝트의 일수별로 오름차순 -> start_date별로 오름차순 >> input 예시 어려웠던 점 => 아니 연속되는 값을 어떻게 판별하는데? => 같은 행에서 왔다갔다하며 조회하는 게 가능? => 가능했음 >>풀이1. 분석함수 없이 기준선 만들기 결국 end_date가 연속된 데이터들끼리 묶어줄 무언가가 필요함 => end_date가 연속된다면, 각 end_date 별 차..