65일차

Suhyeon Lee·2025년 1월 2일

CodeKata

SQL

프로그래머스: 조건에 맞는 사원 정보 조회하기

  • 작성한 쿼리
WITH year_score AS (
  SELECT
    emp_no
    , SUM(score) AS score
  FROM
    hr_grade
  GROUP BY
    emp_no
)
, rank_score AS (
  SELECT
    he.emp_no
    , emp_name
    , position
    , email
    , score
    , RANK() OVER (ORDER BY score DESC) AS rnk
  FROM
    hr_employees he
    JOIN year_score ys
    USING(emp_no)
)
SELECT
  score
  , emp_no
  , emp_name
  , position
  , email
FROM
  rank_score
WHERE
  rnk = 1
;

참고할 만한 다른 풀이

SELECT 
SUM(SCORE) SCORE,
E.EMP_NO,	
EMP_NAME, POSITION,	
EMAIL
FROM  
HR_EMPLOYEES E JOIN HR_GRADE G
ON E.EMP_NO = G.EMP_NO
GROUP BY E.EMP_NO
HAVING
    SUM(SCORE) = (SELECT MAX(R.RESULT)
                  FROM (SELECT SUM(SCORE) RESULT , EMP_NO
                        FROM HR_GRADE
                        GROUP BY EMP_NO) AS R
                  )

특강

데이터 수집 1회차

  • 최종 프로젝트 관련 팁
    • 먼저 어떤 문제를 풀지 리스트업하고 데이터를 수집하거나 불러오는 것을 추천합니다!

강의

스파크 1주차

최종 프로젝트 준비

compas 공모전 관련

  • 버전이 안 맞아서 코드 수정
# 그룹화 및 병합 함수 정의
def group_and_merge_geometry(df, group_keys, agg_columns):
    # 그룹화에서 geometry 제외
    grouped = df.groupby(group_keys, as_index=False).agg(agg_columns)
    # geometry 병합 (중복 제거)
    geometry_data = df[group_keys + ['geometry']].drop_duplicates()
    # 병합하여 최종 데이터 생성
    merged = grouped.merge(geometry_data, on=group_keys)
    return merged

# 그룹화 키 및 집계 함수 정의
grid_columns = ['SPO_NO_CD', 'SECT_CD']  # geometry 제외
agg_columns = {
    '20~29': 'sum', '30~39': 'sum', '40~49': 'sum',
    '50~59': 'sum', '60~69': 'sum', '70~': 'sum',
    'man': 'sum', 'woman': 'sum', 'total': 'sum'
}

# 화성시 데이터 처리
hwaseong_grouped = group_and_merge_geometry(hwaseong_1, grid_columns, agg_columns)

# 하남시 데이터 처리
hanam_grouped = group_and_merge_geometry(hanam_1, grid_columns, agg_columns)

회고

  • 분석에 필요한 데이터셋 찾는 것부터가 문제구나
    • 특히나 게임 데이터는 비공개 정보가 너무 많아서 난항을 겪는 중😥
  • ChatGPT는 신이야!
    • 배운 점
    1. 함수를 만들면 여러 번 적을 필요가 없음(함수 불러오기만 하면 됨)
    2. 그룹화에 필요한 내용을 길게 적지 않고 따로 변수에 담으면 더 깔끔함
profile
2 B R 0 2 B

0개의 댓글