일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 시계열분해
- 빈 데이터프레임 #pandas #데이터전처리
- Python
- 시계열데이터셋
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- loess
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- 년월일 데이터
- 오제이튜브
- 시간형식변환
- 리눅스개념
- 파이프라인전처리
- 시계열
- adf_test
- 짧은 시계열 # 금융시계열
- 이수역 양식집
- 시계열모듈
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- seaborn # kdeplot # 데이터분석
- 시계열시각화
- np.split
- stl
- pandas
- 날짜파싱
- 응용이 보이는 선형대수
- timeseries decomposition
- 플로틀리
- 크롤링자동화
- 확률
- 시간형식
- Today
- Total
먼지뭉치 Data Analysis
SQL 직원이 속한 전체 부서의 평균 급여 출력하기1 - 셀프조인 본문
안녕하세요!
오늘은 풀었던 SQL 쿼리문제를 정리해보려 합니다.
가끔 기본문제 같은데 헷갈리는 문제들이 있어 정리를 꾸준히 해놔야겠다고 생각했습니다.
기본문제의 경우 ChatGpt로 풀고 있어서 Sql 준비하시는 분들도 한번 이용해보시면 좋을 것 같습니다.
데이터는 아래와 같습니다.
Q. 각 직원의 이름과 그 직원이 속한 전체 부서의 평균 급여를 함께 출력하라.
처음 시도.
평균 급여가 필요하니 group by를 사용해야 하고.
근데 Department를 기준으로 group by 하게 되면 각각의 employeeID를 출력할 수가 없었습니다.
그래서 group by로 department 컬럼 뿐만 아니라 employeeID, Name 까지 해서 출력해 보았습니다.
시도 결과
Name을 출력하려고 group by에 Name컬럼을 넣었더니 부서별 평균급여가 적용되지 않더라고요.
원래 개인의 연봉이 출력되었습니다.
아마 1개뿐인 Name으로 먼저 그룹화가 진행되니 그대로 출력된 것 같습니다.
쿼리문제를 풀때 자주 걸렸던 문제라 자세하게 여러가지 솔루션으로 정리해보려 합니다.
Solution1. SELF JOIN
셀프조인 방법이 가장 먼저 Chatgpt에서 추천해주는 솔루션이었습니다.
# Soultion1: 셀프조인
SELECT
e.Name AS EmployeeName,
e.Department,
AVG(d.Salary) AS DepartmentAvgSalary
FROM Employee e
JOIN Employee d ON e.Department = d.Department
GROUP BY e.EmployeeID, e.Name, e.Department;
근데 머릿속으로 아무리 이해해보려해도 deparment행으로 조인되었을때의 그래프가 안그려지더라고요.
종이에 직접 두개의 테이블을 합쳐보기도 하고 했지만..
결국 gpt에게 도움을 받았습니다.
" e.Department = d.Department 위 조건으로 셀프조인했을때 나오는 모든 행이 포함된 테이블을 보여줘."
이제야 이해가 되더라고요.
보시는것과 같이 IT 부서에 속한 모든 데이터가 조인되는 걸 볼 수 있었습니다.
Salary_e는 한사람의 급여만 나오게 되고,
Salary_d의 경우 모든 IT 직원의 연봉이 출력되었습니다.
눈으로 보니 확실히 이해가 되었습니다.
다음 포스팅에선 셀프조인 이외에 다른 방법으로 해결하는 방법에 대해 올려보도록 하겠습니다.
도움이 되셨으면 좋겠습니다. 감사합니다 :)