포스팅 목차
59. Display the employee names who are working in Chicago.
* 시카고에서 근무하고 있는 직원의 정보를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교연산자
|
1. Oracle(오라클)
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원의 정보를 출력한다.
Oracle Programming |
select ename
from emp
where deptno = (select deptno from dept where loc='CHICAGO');
2. Python Pandas(파이썬)
Python Programming |
print( type( dept[dept['loc'] == 'CHICAGO']['deptno'] ) )
print( type( dept[dept['loc'] == 'CHICAGO']['deptno'].iloc[0] ) )
<class 'pandas.core.series.Series'>
<class 'numpy.int64'>
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 부서를 선택한다.
Python Programming |
emp[emp['deptno']== dept[dept['loc'] == 'CHICAGO']['deptno'].iloc[0] ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
9 | 7844 | TURNER | SALESMAN | 7698.0 | 1981/09/08 | 1500 | 0.0 | 30 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
3. R Programming (R Package)
R Programming |
%%R
print( class(dept[dept$loc == 'CHICAGO', c("deptno") ]) )
print( class(dept[dept$loc == 'CHICAGO', c("deptno") ]$deptno) )
Results |
[1] "tbl_df" "tbl" "data.frame"
[1] "numeric"
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 부서를 선택한다.
R Programming |
%%R
emp[emp$deptno == dept[dept$loc == 'CHICAGO', c("deptno") ]$deptno,"ename"]
Results |
# A tibble: 6 x 1
ename
<chr>
1 ALLEN
2 WARD
3 MARTIN
4 BLAKE
5 TURNER
6 JAMES
4. R Dplyr Package
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 부서를 선택한다.
filter 함수를 사용하여서 emp 테이블의 부서번호(deptno)가 dept 테이블에서 선택된 부서코드에 존재하는지 검색한다.
R Programming |
%%R
emp %>% dplyr::filter( deptno == ( dept %>%
dplyr::filter(loc == "CHICAGO") %>%
dplyr::select(deptno) %>%
pull(deptno)) )
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
2 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
3 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
4 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
5 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
6 7900 JAMES CLERK 7698 1981-12-03 950 NA 30
5. R sqldf Package
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원의 정보를 출력한다.
R Programming |
%%R
sqldf(" Select ename
from emp
where deptno=(select deptno from dept where loc='CHICAGO')")
Results |
ename
1 ALLEN
2 WARD
3 MARTIN
4 BLAKE
5 TURNER
6 JAMES
6. Python pandasql Package
Python Programming |
ps.sqldf("Select ename from emp where deptno=(select deptno from dept where loc='CHICAGO')")
Results |
ename | |
0 | ALLEN |
1 | WARD |
2 | MARTIN |
3 | BLAKE |
4 | TURNER |
5 | JAMES |
7. R data.table Package
R Programming |
%%R
dept_DT <- data.table(dept)
print( class( dept_DT[loc == "CHICAGO", .(deptno)] ) )
print( class( dept_DT[loc == "CHICAGO", .(deptno)]$deptno ) )
Results |
[1] "data.table" "data.frame"
[1] "numeric"
dept 테이블에서 시카고에 위치한 부서 번호를 테이블로 선택 후 emp 테이블과 내부조인(DT syntax)을 수행하여서 시카고에 위치한 부서에서 근무하는 직원의 정보를 출력한다.
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[DT[,deptno == ( dept_DT[loc == "CHICAGO", .(deptno)]$deptno )]]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
2: 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
3: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
4: 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
5: 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
6: 7900 JAMES CLERK 7698 1981-12-03 950 NA 30
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select ename
from emp
where deptno = (select deptno from dept where loc='CHICAGO');
QUIT;
PROC PRINT;RUN;
Results |
OBS | ename |
1 | ALLEN |
2 | WARD |
3 | MARTIN |
4 | BLAKE |
5 | TURNER |
6 | JAMES |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1;
BY deptno;
RUN;
DATA STATSAS_3;
MERGE EMP_1(IN=A) dept(where=(loc='CHICAGO') IN=B);
BY deptno;
IF A AND B;
RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno | dname | loc |
1 | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 | SALES | CHICAGO |
2 | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 | SALES | CHICAGO |
3 | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30 | SALES | CHICAGO |
4 | 7698 | BLAKE | MANAGER | 7839 | 1981-03-01 | 2850 | . | 30 | SALES | CHICAGO |
5 | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 | SALES | CHICAGO |
6 | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | . | 30 | SALES | CHICAGO |
10. Python Dfply Package
- X.loc 로 변수명 지정하는 경우 에러 발생
- 에러문 : AttributeError: 'NotImplementedType' object has no attribute 'dtype'
- 관련이슈 : https://github.com/kieferk/dfply/issues/65
- 조치사항 : 1) 변수명 사전 변경하여 처리 2) X['loc'] 로 변수 지정하는 방법
- loc 변수 Rename
Python Programming |
# [참고] 함수 사용. (52번 예제 참고)
@pipe
def pull_fun(df, column=-1):
return df.loc[:, column].item()
# dept >> rename(loc_var ='loc') >> filter_by( X.loc_var == "CHICAGO") >> select(X['deptno']) >> pull_fun("deptno")
emp >> filter_by( X.deptno == ( dept >> rename(loc_var ='loc') >> filter_by( X.loc_var == "CHICAGO") >> select(X['deptno']) >> pull_fun("deptno") ))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
9 | 7844 | TURNER | SALESMAN | 7698.0 | 1981/09/08 | 1500 | 0.0 | 30 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
- X['loc']로 변수 지정하는 방법
Python Programming |
# [참고] 함수 사용. (52번 예제 참고)
@pipe
def pull_fun(df, column=-1):
return df.loc[:, column].item()
emp >> filter_by( X.deptno == ( dept >> filter_by( X['loc'] == "CHICAGO") >> select(X.deptno) >> pull_fun("deptno") ))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
9 | 7844 | TURNER | SALESMAN | 7698.0 | 1981/09/08 | 1500 | 0.0 | 30 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
댓글