58일차

Suhyeon Lee·2024년 12월 20일

CodeKata

SQL

179. Interviews

  • 작성한 쿼리
SELECT
  ct.contest_id
  , ct.hacker_id
  , ct.name
  , IFNULL(SUM(ss.ts_sum), 0) AS ts_ss
  , IFNULL(SUM(ss.tas_sum), 0) AS tas_ss
  , IFNULL(SUM(vs.tv_sum), 0) AS tv_vs
  , IFNULL(SUM(vs.tuv_sum), 0) AS tuv_vs
FROM
  contests ct
  LEFT JOIN colleges cl
  USING(contest_id)
  LEFT JOIN challenges ch
  USING(college_id)
  LEFT JOIN (
    SELECT
      challenge_id
      , SUM(total_views) AS tv_sum
      , SUM(total_unique_views) AS tuv_sum
    FROM
      view_stats
    GROUP BY
      challenge_id
  ) vs
  USING(challenge_id)
  LEFT JOIN (
    SELECT
      challenge_id
      , SUM(total_submissions) AS ts_sum
      , SUM(total_accepted_submissions) AS tas_sum
    FROM
      submission_stats
    GROUP BY
      challenge_id
  ) ss
  USING(challenge_id)
GROUP BY
  ct.contest_id
  , ct.hacker_id
  , ct.name
HAVING
  ts_ss + tas_ss + tv_vs + tuv_vs > 0
ORDER BY
  ct.contest_id
;

→ 그냥 전부 JOIN하면 되는 거 아닌가 했다가 엄청 해맸음…

  • 첫 시도: 틀렸음(수치가 2배, 3배로 늘어남)
SELECT
  ct.contest_id
  , ct.hacker_id
  , ct.name
  , IFNULL(SUM(ss.total_submissions), 0) AS ts_ss
  , IFNULL(SUM(ss.total_accepted_submissions), 0) AS tas_ss
  , IFNULL(SUM(vs.total_views), 0) AS tv_vs
  , IFNULL(SUM(vs.total_unique_views), 0) AS tuv_vs
FROM
  contests ct
  LEFT JOIN colleges cl
  USING(contest_id)
  LEFT JOIN challenges ch
  USING(college_id)
  LEFT JOIN view_stats vs
  USING(challenge_id)
  LEFT JOIN submission_stats ss
  USING(challenge_id)
GROUP BY
  ct.contest_id
  , ct.hacker_id
  , ct.name
HAVING
  ts_ss + tas_ss + tv_vs + tuv_vs > 0
ORDER BY
  ct.contest_id
;
  • with으로 썼더니 오류가 떠서 맞는 쿼리인지 확인을 못함
WITH vs_sum AS (
  SELECT
    challenge_id
    , SUM(total_views) AS tv_sum
    , SUM(total_unique_views) AS tuv_sum
  FROM
    view_stats
  GROUP BY
    challenge_id
)
, ss_sum AS (
  SELECT
    challenge_id
    , SUM(total_submissions) AS ts_sum
    , SUM(total_accepted_submissions) AS tas_sum
  FROM
    submission_stats
  GROUP BY
    challenge_id
)
SELECT
  ct.contest_id
  , ct.hacker_id
  , ct.name
  , IFNULL(SUM(ss.ts_sum), 0) AS ts_ss
  , IFNULL(SUM(ss.tas_sum), 0) AS tas_ss
  , IFNULL(SUM(vs.tv_sum), 0) AS tv_vs
  , IFNULL(SUM(vs.tuv_sum), 0) AS tuv_vs
FROM
  contests ct
  LEFT JOIN colleges cl
  USING(contest_id)
  LEFT JOIN challenges ch
  USING(college_id)
  LEFT JOIN vs_sum vs
  USING(challenge_id)
  LEFT JOIN ss_sum ss
  USING(challenge_id)
GROUP BY
  ct.contest_id
  , ct.hacker_id
  , ct.name
HAVING
  ts_ss + tas_ss + tv_vs + tuv_vs > 0
ORDER BY
  ct.contest_id
;

참고할 만한 다른 풀이

	select con.contest_id, 
	       con.hacker_id, 
	       con.name, 
	       sum(total_submissions), 
	       sum(total_accepted_submissions), 
	       sum(total_views), 
	       sum(total_unique_views)
	from contests con
	join colleges col on con.contest_id = col.contest_id
	join challenges cha on col.college_id = cha.college_id
	 
	left join (select challenge_id, 
	           sum(total_views) total_views, 
	           sum(total_unique_views) total_unique_views 
	           from View_Stats 
	           group by challenge_id) v 
	           on cha.challenge_id = v.challenge_id
	 
	left join (select challenge_id, 
	           sum(total_submissions) total_submissions, 
	           sum(total_accepted_submissions) total_accepted_submissions 
	           from Submission_Stats 
	           group by challenge_id) s 
	           on cha.challenge_id = s.challenge_id
	           
	group by con.contest_id, con.hacker_id, con.name
	 
	having sum(total_submissions) !=0 
	       or sum(total_accepted_submissions) != 0
	       or sum(total_views) != 0 
	       or sum(total_unique_views) !=0
	       order by con.contest_id

→ 4개의 값이 동시에 0인 경우를 제외하라고 했으므로 Having 절을 추가

팀 프로젝트

태블로 관련

Tableau 파일 유형 및 폴더

  • .twb

    • Tableau 통합 문서 파일의 파일 확장명
    • 통합 문서에는 하나 이상의 워크시트와 0개 이상의 대시보드 및 스토리가 포함됨
    • 데이터 원본은 저장되지 않고 저장 경로 정보는 저장됨
      • 협업 시 상대방과 나의 데이터 저장 경로가 다를 때는 사용하기 불편
      • 데이터는 저장하지 않기 때문에 .twbx 보다는 파일 크기가 작은 편
  • .twbx

    • Tableau 패키지 통합 문서의 파일 확장명
      • 패키지 통합 문서: 지원되는 로컬 파일 데이터 및 배경 이미지와 함께 통합 문서를 포함하는 단일 zip 파일
    • 원본 데이터 액세스 권한이 없는 다른 사람들과 공유하기 위해 작업을 패키지하는 최상의 방법
      • 원본과 함께 저장
    • 파일 크기 크지만 데이터 원본이 함께 공유되기 때문에 협업 시 추천
      - 원본 데이터 추출 후 저장해야 다른 사람도 볼 수 있음! ★★★
      그룹, 집합, 계층, 총계, 맵
      그룹과 집합
      매개변수 활용 방법
  • 경수님, 재호님이 추천해주신 강의! 꼭 듣기

태블로 지도 기능 사용법

태블로 대시보드 관련

모양 마크에 내가 넣고 싶은 이미지 넣기
대시보드 안에서 워크시트 바꾸기
필터에서 "전체" 표현하기

기타

택지정보시스템
→ 임대주택 사업지구별로 묶어서 표시하면 좋을 것 같아서 일단 찾아놨음

회고

  • 오늘 SQL 너무 이해가 안 되어서 파이썬 알고리즘은 못 풀었다~
    • 알고 보면 그렇게 어렵지 않은 문제였는데
      • hackerrank가 with절을 받아줄 때도 있고 안 받아줄 때도 있어서 try&error 확인이 오래 걸림
        → 다른 사람들 제출 보면 with절 잘 쓰던데 왜 난 안 될까?
  • 팀 프로젝트 뭔가 계획대로 촵촵 되고 있어서 신기
    • 하지만 팀원들의 주말을 지켜주지 못했다…
    • 그래도! 크리스마스는! 무조건! 쉰다! 아자!
profile
2 B R 0 2 B

0개의 댓글