포스팅 목차
162. list out the all employees by name and number along with their manager’s name and number also display ‘No Manager’ who has no manager.
* 사원 정보와 해당 관리자의 정보를 함께 출력한다. 해당 관리자가 없는 경우 관리자 이름에 ‘No Manager’를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- 유사문제 : 114
- 참고 프로그램 : 동적 프로그램 실행 - 154번,161번, 162번
- [데이터 추출] 특정 조건을 만족하는 데이터 추출 - 데이터 상하 결합(UNION), 변수명 변경
- 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
|
1. Oracle(오라클)
emp 테이블을 self join 형식으로 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 사원번호(‘mgr_empno’)와 관리자명(‘ManagerName’)을 출력한다. 담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 표시한 후 세로결합(Union)으로 앞의 결과와 출력한다.
Oracle Programming |
select e.empno,e.ename,
m.empno as mgr_empno,
m.ename as ManagerName
from emp e, emp m
where e.mgr = m.empno
union
select empno,ename,
mgr as mgr_empno,
'No Manager' as ManagerName
from emp
where mgr is null;
2. Python Pandas(파이썬)
emp 테이블을 self join 형식으로 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 관리자 이름(‘ManagerName’)을 추가하여 출력한다.
- 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수명(변수명이 ‘_x’로 끝나는 변수명) 에서 str.rstrip() 함수를 사용하여서 접미어(‘_x’)를 제거한다.
- rename() 함수를 사용하여 관리자 정보에 해당하는 정보를 조회한 오른쪽 테이블의 변수명(변수명이 ‘_y’로 끝나는 변수명)을 표시하기 위하여 접미어(‘_y’)가 추가된 관리자 이름(‘ename_y’)을 “ManagerName” 으로 변수명을 변경한다.
Python Programming |
withmooc = pd.merge( emp,
emp,
how='inner',
left_on=['mgr'], right_on=['empno'])[ lambda x: (col for col in x if (col.endswith('_x') | col.endswith('ename_y') )) ]
withmooc.columns = withmooc.columns.str.rstrip('_x')
withmooc = withmooc.rename(index=str, columns={"ename_y": "ManagerName"})
withmooc.head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | ManagerName | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 | FORD |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 | BLAKE |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 | BLAKE |
3 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 | BLAKE |
4 | 7844 | TURNER | SALESMAN | 7698.0 | 1981/09/08 | 1500 | 0.0 | 30 | BLAKE |
5 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 | BLAKE |
6 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 | KING |
7 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 | KING |
8 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 | KING |
9 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 | JONES |
10 | 7902 | FORD | ANALYST | 7566.0 | 1981/12/03 | 3000 | NaN | 20 | JONES |
11 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 | SCOTT |
12 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 | CLARK |
담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 표시하여 출력한다.
- 데이터프레임에 열 추가 시 “SettingWithCopyWarning” 경고 메시지의 발생을 제어하기 위하여 deepcopy() 함수로 테이블을 복사하여서 처리 가능
- SettingWithCopyWarning 발생원인 : https://emilkwak.github.io/pandas-dataframe-settingwithcopywarning
Python Programming |
import copy
withmooc1 = emp[emp['mgr'].isna()]
withmooc2 = copy.deepcopy(withmooc1) # SettingWithCopyWarning 경과 메시지 제어
withmooc2['ManagerName'] = 'No Manager'
withmooc2
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | ManagerName | |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 | No Manager |
위에서 생성한 2개의 결과를 세로결합(outer)을 수행하여 출력한다.
Python Programming |
pd.concat([withmooc,withmooc2],join='outer').tail() # union
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | ManagerName | |
9 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 | JONES |
10 | 7902 | FORD | ANALYST | 7566.0 | 1981/12/03 | 3000 | NaN | 20 | JONES |
11 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 | SCOTT |
12 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 | CLARK |
28 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 | No Manager |
3. R Programming (R Package)
emp 테이블을 self join 형식으로 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 관리자 이름(‘ename.y’)을 추가하여 출력한다.
- 테이블 결합 후 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수들(변수명이 ‘.x’로 끝나는 변수명)과 관리자 정보에 해당하는 정보를 조회한 오른쪽 테이블의 변수(변수명이 ‘.y’로 끝나는 변수명) 중 관리자명(‘ename.y’)을 선택하여서 출력한다.
- 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수명(변수명이 ‘.x’로 끝나는 변수명) 에서 gsub() 함수를 사용하여서 접미어(‘.x’)를 제거한다.
- rename() 함수를 사용하여 관리자 이름(‘ename.y’)을 “ManagerName” 으로 변수명을 변경한다.
R Programming |
%%R
library(reshape)
library(plyr)
withmooc <- merge(emp, emp, by.x=c("mgr"),by.y=c("empno"),all=F)
withmooc <- withmooc[,grep("mgr$|empno|.x$|ename.y$", names(withmooc))]
withmooc
colnames(withmooc) <- gsub('.x$','',colnames(withmooc))
# withmooc <- plyr::rename(withmooc,c(ename.y="ManagerName"))
withmooc <- reshape::rename(withmooc, c(ename.y="ManagerName"))
withmooc[1:5, ]
Results |
mgr empno ename job hiredate sal comm deptno ManagerName
1 7566 7788 SCOTT ANALYST 1982-12-09 3000 NA 20 JONES
2 7566 7902 FORD ANALYST 1981-12-03 3000 NA 20 JONES
3 7698 7499 ALLEN SALESMAN 1981-02-20 1600 300 30 BLAKE
4 7698 7521 WARD SALESMAN 1981-02-22 1250 500 30 BLAKE
5 7698 7900 JAMES CLERK 1981-12-03 950 NA 30 BLAKE
담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 할당하여 출력한다.
R Programming |
%%R
wihtmooc1 <- emp[is.na(emp$mgr) , ]
wihtmooc1['ManagerName'] <- 'No Manager'
wihtmooc1
Results |
# A tibble: 1 x 9
empno ename job mgr hiredate sal comm deptno ManagerName
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr>
1 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10 No Manager
위에서 생성한 2개의 결과를 세로결합(outer)을 수행하여 출력한다.
R Programming |
%%R
union(withmooc, wihtmooc1) %>% tail()
Results |
# A tibble: 6 x 9
mgr empno ename job hiredate sal comm deptno ManagerName
<dbl> <dbl> <chr> <chr> <date> <dbl> <dbl> <dbl> <chr>
1 7788 7876 ADAMS CLERK 1983-01-12 1100 NA 20 SCOTT
2 7839 7782 CLARK MANAGER 1981-01-09 2450 NA 10 KING
3 7839 7566 JONES MANAGER 1981-04-02 2975 NA 20 KING
4 7839 7698 BLAKE MANAGER 1981-03-01 2850 NA 30 KING
5 7902 7369 SMITH CLERK 1980-12-17 800 NA 20 FORD
6 NA 7839 KING PRESIDENT 1981-11-17 5000 NA 10 No Manager
4. R Dplyr Package
emp 테이블을 self join 형식으로 dplyr::inner_join() 함수를 사용하여 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 관리자 이름(‘ename.y’)을 추가하여 출력한다.
- 테이블 결합 후 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수들(변수명이 ‘.x’로 끝나는 변수명)과 관리자 정보에 해당하는 정보를 조회한 오른쪽 테이블의 변수(변수명이 ‘.y’로 끝나는 변수명) 중 관리자명(‘ename.y’)을 선택하여서 출력한다.
- 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수명(변수명이 ‘.x’로 끝나는 변수명) 에서 dplyr::rename_all() 함수를 사용하여서 접미어(‘.x’)를 제거한다.
- 추가로 rename() 함수를 사용하여 관리자 이름(‘ename.y’)을 “ManagerName” 으로 변수명을 변경한다.
R Programming |
%%R
withmooc <- emp %>%
dplyr::inner_join( emp, by = c('mgr' = 'empno') ) %>%
dplyr::select(empno, ends_with('.x'), ename.y) %>%
dplyr::rename_all(funs(sub('.x$', '' , .))) %>%
dplyr::rename(ManagerName = ename.y)
withmooc[1:5, ]
Results |
# A tibble: 13 x 8
empno ename job hiredate sal comm deptno ManagerName
<dbl> <chr> <chr> <date> <dbl> <dbl> <dbl> <chr>
1 7369 SMITH CLERK 1980-12-17 800 NA 20 FORD
2 7499 ALLEN SALESMAN 1981-02-20 1600 300 30 BLAKE
3 7521 WARD SALESMAN 1981-02-22 1250 500 30 BLAKE
4 7566 JONES MANAGER 1981-04-02 2975 NA 20 KING
5 7654 MARTIN SALESMAN 1981-09-28 1250 1400 30 BLAKE
6 7698 BLAKE MANAGER 1981-03-01 2850 NA 30 KING
7 7782 CLARK MANAGER 1981-01-09 2450 NA 10 KING
8 7788 SCOTT ANALYST 1982-12-09 3000 NA 20 JONES
9 7844 TURNER SALESMAN 1981-09-08 1500 0 30 BLAKE
10 7876 ADAMS CLERK 1983-01-12 1100 NA 20 SCOTT
11 7900 JAMES CLERK 1981-12-03 950 NA 30 BLAKE
12 7902 FORD ANALYST 1981-12-03 3000 NA 20 JONES
13 7934 MILLER CLERK 1982-01-23 1300 NA 10 CLARK
담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 할당하여 출력한다.
R Programming |
%%R
withmooc1 <- emp %>%
filter(is.na(mgr) ) %>%
dplyr::mutate(ManagerName = 'No Manager') %>%
dplyr::select(-'mgr')
withmooc1
Results |
# A tibble: 1 x 8
empno ename job hiredate sal comm deptno ManagerName
<dbl> <chr> <chr> <date> <dbl> <dbl> <dbl> <chr>
1 7839 KING PRESIDENT 1981-11-17 5000 NA 10 No Manager
위에서 생성한 2개의 결과를 세로결합(outer)을 수행하여 출력한다.
R Programming |
%%R
withmooc %>%
union(withmooc1) %>%
tail()
Results |
# A tibble: 6 x 8
empno ename job hiredate sal comm deptno ManagerName
<dbl> <chr> <chr> <date> <dbl> <dbl> <dbl> <chr>
1 7844 TURNER SALESMAN 1981-09-08 1500 0 30 BLAKE
2 7876 ADAMS CLERK 1983-01-12 1100 NA 20 SCOTT
3 7900 JAMES CLERK 1981-12-03 950 NA 30 BLAKE
4 7902 FORD ANALYST 1981-12-03 3000 NA 20 JONES
5 7934 MILLER CLERK 1982-01-23 1300 NA 10 CLARK
6 7839 KING PRESIDENT 1981-11-17 5000 NA 10 No Manager
5. R sqldf Package
emp 테이블을 self join 형식으로 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 사원번호(‘mgr_empno’)와 관리자명(‘ManagerName’)을 출력한다. 담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 표시한 후 세로결합(Union)으로 앞의 결과와 출력한다.
R Programming |
%%R
sqldf(" select e.empno,e.ename,
m.empno as Manager,
m.ename as ManagerName
from emp e,emp m
where e.mgr = m.empno
union
select empno,ename,
mgr as Manager,
'No Manager' as ManagerName
from emp where mgr is null;") %>% tail(7)
Results |
empno ename Manager ManagerName
1 7369 SMITH 7902 FORD
2 7499 ALLEN 7698 BLAKE
3 7521 WARD 7698 BLAKE
4 7566 JONES 7839 KING
5 7654 MARTIN 7698 BLAKE
6 7698 BLAKE 7839 KING
7 7782 CLARK 7839 KING
8 7788 SCOTT 7566 JONES
9 7839 KING NA No Manager
10 7844 TURNER 7698 BLAKE
11 7876 ADAMS 7788 SCOTT
12 7900 JAMES 7698 BLAKE
13 7902 FORD 7566 JONES
14 7934 MILLER 7782 CLARK
6. Python pandasql Package
Python Programming |
ps.sqldf(" select e.empno,e.ename,m.empno Manager,m.ename ManagerName \
from emp e,emp m \
where e.mgr=m.empno \
union \
select empno,ename,mgr as Manager,'No Manager' as ManagerName \
from emp where mgr is null; ").tail(7)
Results |
empno | ename | Manager | ManagerName | |
7 | 7788 | SCOTT | 7566.0 | JONES |
8 | 7839 | KING | NaN | No Manager |
9 | 7844 | TURNER | 7698.0 | BLAKE |
10 | 7876 | ADAMS | 7788.0 | SCOTT |
11 | 7900 | JAMES | 7698.0 | BLAKE |
12 | 7902 | FORD | 7566.0 | JONES |
13 | 7934 | MILLER | 7782.0 | CLARK |
7. R data.table Package
emp 테이블을 DT 결합 방식으로 관리자 사원번호(‘mgr’)와 사원번호(‘empno’)을 기준으로 내부조인(Inner Join)을 수행하여서 담당 관리자가 존재하는 경우 담당 관리자의 관리자 이름(‘i.ename’)을 추가하여 출력한다.
- 테이블 결합 후 사원정보에 해당하는 정보를 조회한 왼쪽 테이블의 변수들과 관리자 정보에 해당하는 정보를 조회한 오른쪽 테이블의 변수(변수명이 ‘i.’으로 시작하는 변수명) 중 관리자명(‘i.ename’)을 선택하여서 출력한다.
- 관리자 이름(‘i.ename’) 변수명을 ‘ManagerName’ 변경하는 방식으로 신규 변수(‘ManagerName’)로 할당하여서 이름을 변경하는 방식과 data.table::setnames() 함수를 사용하여서 변경하는 방식이 있다.
R Programming |
%%R
DT <- data.table(emp)
withmooc = DT[DT, nomatch=NULL, on = .(mgr = empno), ][, c('i.ename' , colnames(DT)), with=FALSE][, ManagerName := i.ename][,!c("i.ename")]
# data.table::setnames(withmooc,"i.ename", "ManagerName") # 'i.ename'을 'ManagerName'으로 변경한다.
withmooc
Results |
empno ename job mgr hiredate sal comm deptno ManagerName
1: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20 JONES
2: 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20 JONES
3: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 BLAKE
4: 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 BLAKE
5: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 BLAKE
6: 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 BLAKE
7: 7900 JAMES CLERK 7698 1981-12-03 950 NA 30 BLAKE
8: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10 CLARK
9: 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20 SCOTT
10: 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 KING
11: 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 KING
12: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10 KING
13: 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 FORD
담당 관리자의 사원번호가 존재하지 않은 경우 관리자의 이름을 ‘No Manager’로 할당하여 출력한다.
R Programming |
%%R
DT <- data.table(emp)
# DT[is.na(mgr)][,ManagerName := mgr]
withmooc1 <- DT[is.na(mgr)][, `:=`(ManagerName = "No Manager")]
위에서 생성한 2개의 결과를 funion() 함수를 사용하여 세로결합(outer)을 수행하여 출력한다.
R Programming |
%%R
funion(withmooc,withmooc1)
Results |
empno ename job mgr hiredate sal comm deptno ManagerName
1: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20 JONES
2: 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20 JONES
3: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 BLAKE
4: 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 BLAKE
5: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 BLAKE
6: 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 BLAKE
7: 7900 JAMES CLERK 7698 1981-12-03 950 NA 30 BLAKE
8: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10 CLARK
9: 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20 SCOTT
10: 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 KING
11: 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 KING
12: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10 KING
13: 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 FORD
14: 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10 No Manager
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select e.empno,e.ename,
m.empno as mgr_empno,
m.ename as ManagerName
from emp e, emp m
where e.mgr = m.empno
union
select empno,ename,
mgr as mgr_empno,
'No Manager' as ManagerName
from emp
where mgr is null;
QUIT;
PROC PRINT data=STATSAS_1(obs=5);RUN;
Results |
OBS | empno | ename | mgr_empno | ManagerName |
1 | 7369 | SMITH | 7902 | FORD |
2 | 7499 | ALLEN | 7698 | BLAKE |
3 | 7521 | WARD | 7698 | BLAKE |
4 | 7566 | JONES | 7839 | KING |
5 | 7654 | MARTIN | 7698 | BLAKE |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1(RENAME=MGR=MGR_EMPNO);
BY MGR;
RUN;
PROC SORT DATA=EMP OUT=EMP_2(RENAME=(EMPNO=MGR_EMPNO ENAME=MANAGERNAME) KEEP=EMPNO ENAME);
BY empno;
RUN;
DATA STATSAS_2(RENAME=MANAGERNAME_1=MANAGERNAME);
MERGE EMP_1(in=a) EMP_2(in=b);
BY MGR_EMPNO;
IF A AND B;
LENGTH MANAGERNAME_1 $10.;
MANAGERNAME_1 = MANAGERNAME;
KEEP EMPNO ENAME MGR_EMPNO MANAGERNAME_1;
RUN;
DATA EMP3;
SET EMP;
ManagerName = 'No Manager';
RENAME MGR = MGR_EMPNO;
KEEP EMPNO ENAME MGR ManagerName;
WHERE mgr = .;
RUN;
DATA MGR_UNION;
SET STATSAS_2 EMP3;
RUN;
PROC PRINT data=MGR_UNION(obs=5);RUN;
Results |
OBS | empno | ename | MGR_EMPNO | MANAGERNAME |
1 | 7788 | SCOTT | 7566 | JONES |
2 | 7902 | FORD | 7566 | JONES |
3 | 7499 | ALLEN | 7698 | BLAKE |
4 | 7521 | WARD | 7698 | BLAKE |
5 | 7654 | MARTIN | 7698 | BLAKE |
10. Python Dfply Package
Python Programming |
@pipe
def inner_join_merge(df, other, left_on,right_on,suffixes):
joined = df.merge(other, how='inner', left_on=left_on,
right_on=right_on , suffixes=suffixes)
return joined
@pipe
def rename_fun(df, col_name):
return df.rename(columns=col_name)
from ast import literal_eval
s = '{'+','.join([ "'" + str(col) + "_x'" + ": '" + str(col) + "'" for col in emp.columns ]) +'}'
# print(s)
emp >> \
inner_join_merge(emp, left_on=['mgr'], right_on=['empno'], suffixes=["_x", "_y"]) >> \
select(ends_with('_x'), X.ename_y, ~X.mgr_x) >> \
rename_fun( literal_eval(s) ) >> \
rename(ManagerName = X.ename_y) >> \
union ( emp >> \
filter_by(X.mgr.isnull()) >> \
mutate(ManagerName = 'No Manager') >> \
select(~X.mgr)) >> \
head()
Results |
empno | ename | job | hiredate | sal | comm | deptno | ManagerName | |
0 | 7369 | SMITH | CLERK | 1980/12/17 | 800 | NaN | 20 | FORD |
1 | 7499 | ALLEN | SALESMAN | 1981/02/20 | 1600 | 300.0 | 30 | BLAKE |
2 | 7521 | WARD | SALESMAN | 1981/02/22 | 1250 | 500.0 | 30 | BLAKE |
3 | 7654 | MARTIN | SALESMAN | 1981/09/28 | 1250 | 1400.0 | 30 | BLAKE |
4 | 7844 | TURNER | SALESMAN | 1981/09/08 | 1500 | 0.0 | 30 | BLAKE |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
댓글