데이터분석 기록일지

문제풀이/스파르타 - sql 문제 13

[SQL] 데이터와 친해지는 SQL | 3회차 숙제

※ 문제에 사용되는 table 구조1. USERS 테이블 2. PAYMENT 테이블 ※ Table 칼럼 설명   1. payment 테이블에서 pay_type이 ‘MONEY’이고 pay_amount가 500,000 이상인 데이터의 개수를 count 해주세요. -- 풀이select count(*)from paymentwhere pay_type = "MONEY" and pay_amount>=500000   2. group by 와 having 절을 사용하여 pay_type 별 최소 pay_amount를 구하고, 그 값이 500이상인 경우를 추출해주세요. -- 풀이select pay_type, min(pay_amount) as min_pay_amtfrom paymentgroup by pay_typehaving..

[SQL] 데이터와 친해지는 SQL | 2회차 숙제

- 문제에 사용되는 table 구조 -  table 칼럼 설명구분상세schemalogid로그idintip_addrip주소stringdate날짜, yyyy-mm-ddstringgame_account_id게임계정idstringgame_actor_id게임캐릭터idintlevel현재레벨intexp현재경험치intserverno서버넘버intzone_id지역넘버intetc_num1파티idintetc_num2파티원수intetc_str1아이템 획득경로stringetc_num3아이템 획득량intetc_str2아이템 이름string   1.  group by 절을 사용하여, 서버별 게임캐릭터id수(중복값 허용x)와 평균 경험치를 추출해주세요.  select serverno, count(distinct(game_actor_i..

[SQL] 데이터와 친해지는 SQL | 1회차 숙제

- 문제에 사용되는 table 구조 -  table 칼럼 설명구분상세schemalogid로그idintip_addrip주소stringdate날짜, yyyy-mm-ddstringgame_account_id게임계정idstringgame_actor_id게임캐릭터idintlevel현재레벨intexp현재경험치intserverno서버넘버intzone_id지역넘버intetc_num1파티idintetc_num2파티원수intetc_str1아이템 획득경로stringetc_num3아이템 획득량intetc_str2아이템 이름string   1. date 컬럼이 2023-01-01 보다 큰 날짜의 game_account_id, game_actor_id, serverno를 추출해주세요. SELECT game_account_id, ..

[사전캠프] SQL 과제 | Lv3. 이용자의 포인트 조회하기

#풀이select u.user_id, email, if(p.user_id is null, 0, point) pointfrom users u left join point_users p on u.user_id =p.user_idorder by 3 desc -> 일단 두 테이블을 합쳐야 하므로 join으로 연결해준다.이때 users 테이블이 point_users 테이블보다 유저 데이터가 많으므로  left join으로 연결해준다.users 테이블에는 있지만 point_users에는 없는 유저는 p.user_id 값이 null이다.그러므로 조건문으로 p.user_id가 null인 값은 포인트 0을, 아니면 원래의 point 값을 가지도록 조건을 걸어준다.그러고 order by로 내가 정한 조건 결과의 내림..

[사전캠프] SQL 과제 | Lv2. 날짜별 획득포인트 조회하기

문제: 다음과 같은 결과테이블을 만들어봅시다.         created_at: 아이디 생성 날짜        average_points: 유저가 획득한 날짜별 평균 포인트(int), 반올림 필수 -- 풀이SELECT date_format(created_at,'%Y-%m-%d') created_at, round(avg(point)) average_pointsfrom point_usersgroup by 1 -> 원래의 created_at 컬럼이 날짜와 시간의 조합으로 되어있으므로, '년-월-일' 만 남도록 바꾸어준다.그리고 point의 평균을 구해야 하므로 avg(point)를 해주고 반올림 해야하니까 round()를 씌워준다.이 평균은 날짜별로 구할것이므로, group by 1 (년-월-일 로 바꾸..

[사전캠프] SQL 연습문제(7)

1. 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!SELECT *from practice7order by satisfaction_score, feedback_date desc-> 문제가 원하는 바가 뭔지 잘 모르겠어서 이게 맞는지 모르겠다..satisfaction_score로 우선 정렬하여, 각각의  satisfaction_score에 따른 feedback_date를 내림차순 정렬해서 풀었다.  2. 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요! SELECT user_name, max(feedback_date) latest_datefrom practice7group by user_name  3. 테이블에서 만족도 점..

[사전캠프] SQL 연습문제(5)

1. 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!select namefrom practice5where aws_cost>=40000   2. 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date # 내풀이select *from practice5where start_date like '2022%'# 다른 정답풀이select *from practice5where year(start_date)=2022 나는 year() 함수를 몰라서 like를 이용해서 풀었는데, 저렇게 년도, 월, 일 등을 반환해주는 함수가 있었다.year(), month(), day(), hour(), minute(), sec..

[사전캠프] SQL 연습문제(6)

1. 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위) # 1select *from practice6order by rating desc처음에는 이런식으로 rating을 기준으로 순서대로 나열만 했다가, 순위를 부여해 주고 싶어서 다른 쿼리를 짰다. #2select *, rank() over(order by rating desc) as "rank"from practice6순위를 부여하는 칼럼을 만들때 사용하는 함수 -> ROW_NUMBER(), RANK(), DENSE_RANK()를 OVER과 사용0. OVER 안에는 순..

[사전캠프] SQL 연습문제(4)

1) 테이블에서 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리를 작성해주세요!select name, trackfrom practice4  2) 테이블에서 Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리를 작성해주세요!select *from practice4where track 'Unity'  3) 테이블에서 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리를 작성해주세요!select *from practice4where enrollment_year in (2021,2023)  4) 테이블에서 Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리를 작성해주세요!select enrollment_yearfrom prac..