포스팅 목차
89. Display those employees whose manager name is JONES.
* 해당 관리자의 이름이 “JONES”인 직원들의 정보를 출려하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- Subquery(서브쿼리) 는 테이블 Join 방식으로 처리 가능하다.
- 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교 연산자(=)
|
1. Oracle(오라클)
관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
Oracle Programming |
select *
from emp
where mgr = (select empno from emp where ename='JONES');
2. Python Pandas(파이썬)
관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
Python Programming |
emp[ ( emp['mgr'] == (emp[emp['ename']=='JONES']['empno'].tolist()[0]) ) ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
7902 | FORD | ANALYST | 7566.0 | 1981/12/03 | 3000 | NaN | 20 |
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
R Programming |
%%R
emp[ (!is.na(emp$mgr)) & emp$mgr == unlist(emp[emp$ename == 'JONES', "empno" ]) ,]
Results |
# A tibble: 2 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
2 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
4. R Dplyr Package
관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
R Programming |
%%R
emp %>%
dplyr::filter( mgr == ( emp %>% dplyr::filter( ename == 'JONES' ) %>% dplyr::select(empno) %>% unlist() )
)
Results |
# A tibble: 2 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
2 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
5. R sqldf Package
관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
R Programming |
%%R
sqldf(" select *
from emp
where mgr = (select empno from emp where ename='JONES');")
Results |
empno ename job mgr hiredate sal comm deptno
1 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
2 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
6. Python pandasql Package
관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
Python Programming |
ps.sqldf("select * from emp where mgr=(select empno from emp where ename='JONES');")
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | None | 20 |
7902 | FORD | ANALYST | 7566.0 | 1981/12/03 | 3000 | None | 20 |
7. R data.table Package
관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
salgrade_DT <- data.table(salgrade)
DT[ (mgr == DT[ename=='JONES', empno ]) , ]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
2: 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select *
from emp
where mgr = (select empno from emp where ename='JONES');
QUIT;
PROC PRINT;RUN;
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | . | 20 |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=emp OUT=EMP_1(RENAME=MGR=EMPNO_BASE);
BY mgr;
RUN;
PROC SORT DATA=emp OUT=EMP_2(RENAME=empno=EMPNO_BASE) NODUPKEY;
BY empno;
where ename='JONES';
RUN;
DATA STATSAS_2;
MERGE EMP_1(IN=A) EMP_2(IN=B);
BY EMPNO_BASE;
IF A AND B THEN OUTPUT;
RUN;
PROC PRINT;RUN;
Results |
empno | ename | job | EMPNO_BASE | hiredate | sal | comm | deptno | mgr |
7788 | JONES | MANAGER | 7566 | 1981-04-02 | 2975 | . | 20 | 7839 |
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | . | 20 | 7839 |
10. Python Dfply Package
Python Programming |
# [참고] 함수 사용. (52번 예제 참고)
@pipe
def pull_fun(df, column=-1):
return df.loc[:, column].item()
# emp >> filter_by( X.ename == 'JONES') >> select(X.empno) >> pull_list("empno")
emp >> filter_by( X.mgr == (emp >> filter_by( X.ename == 'JONES') >> select(X.empno) >> pull_fun("empno")) )
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
7902 | FORD | ANALYST | 7566.0 | 1981/12/03 | 3000 | NaN | 20 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트
반응형
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 추출] 내부 조인(Inner Join)을 만족하는 데이터 추출 - 91 (0) | 2022.09.27 |
---|---|
[데이터 추출] Where 조건절을 만족하는 데이터 추출 - 90 (1) | 2022.09.26 |
[문자 함수] 문자 검색 함수 - 88 (1) | 2022.09.26 |
[문자 함수] 문자 길이 측정 - 87 (1) | 2022.09.26 |
[데이터 전처리] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 상하 결합 UNION 연산자 - 86 (0) | 2022.09.23 |
댓글