포스팅 목차
118. Display those manager who are not working under president but they are working under any other manager?
* 직속 상사가 사장이 아닌 일반 관리자 밑에서 근무하는 직원의 정보를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- 참고문제 : 81 / 82 / 131번
- [데이터 추출] 특정 조건을 만족하는 데이터 추출 - 비상관 서브쿼리(IN 연산자)
- 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
|
1. Oracle(오라클)
서브쿼리를 사용하여서 담당 관라지가 사장(‘KING’) 이외의 일반 관리자인 직원 정보를 출력한다.
Oracle Programming |
select *
from emp e
where mgr in (select empno from emp where ename<>'KING');
2. Python Pandas(파이썬)
isin 함수를 사용하여서 관리자 사원번호에서 사장(‘KING’) 이외의 사원번호를 선택하여서 일반 직속 상사와 근무하는 직원 정보를 출력한다.
Python Programming |
emp[emp['mgr'].isin(emp[emp['ename'] != 'KING']['empno']) ].head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
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 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
3. R Programming (R Package)
%in% 함수를 사용하여서 관리자 사원번호에서 사장(‘KING’) 이외의 사원번호를 선택하여서 일반 직속 상사와 근무하는 직원 정보를 출력한다.
R Programming |
%%R
emp[emp$mgr %in% unlist(emp[emp$ename != 'KING', "empno" ]),] %>% head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
4. R Dplyr Package
%in% 함수를 사용하여서 관리자 사원번호가 사장(‘KING’) 이외의 사원번호에 존재하는 직원들을 선택하여서 일반 직속 상사와 근무하고 있는 직원 정보를 출력한다.
R Programming |
%%R
emp %>%
dplyr::filter( mgr %in% ( emp %>% dplyr::filter( ename != 'KING' ) %>% dplyr::select(empno) %>% unlist() )) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
5. R sqldf Package
서브쿼리를 사용하여서 담당 관라지가 사장(‘KING’) 이외의 일반 관리자인 직원 정보를 출력한다.
R Programming |
%%R
sqldf("select * from emp e where mgr in(select empno from emp where ename<>'KING');") %>% head()
Results |
empno ename job mgr hiredate sal comm deptno
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
6. Python pandasql Package
서브쿼리를 사용하여서 담당 관라지가 사장(‘KING’) 이외의 일반 관리자인 직원 정보를 출력한다.
Python Programming |
ps.sqldf("select * from emp e where mgr in(select empno from emp where ename<>'KING');").head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
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 |
3 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
4 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
7. R data.table Package
%in% 함수를 사용하여서 관리자 사원번호가 사장(‘KING’) 이외의 사원번호에 존재하는 직원들을 선택하여서 일반 직속 상사와 근무하고 있는 직원 정보를 출력한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[DT[,mgr %in% unlist(DT[ename != 'KING', .(empno)])]][1:5, ]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3: 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
4: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
8. SAS Proc SQL
서브쿼리를 사용하여서 담당 관라지가 사장(‘KING’) 이외의 일반 관리자인 직원 정보를 출력한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select *
from emp e
where mgr in (select empno from emp where ename ne 'KING');
QUIT;
PROC SORT;BY EMPNO;RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
3 | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 |
4 | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
5 | 7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
6 | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 |
7 | 7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100 | . | 20 |
8 | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | . | 30 |
9 | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | . | 20 |
10 | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | . | 10 |
9. SAS Data Step
- DATA STEP(CROSS JOIN-카테시안 곱);
SAS Programming |
%%SAS sas
DATA STATSAS_2;
SET emp(where=(ename ne 'KING') rename=(empno=mgr_empno) keep=ename empno);
DO I=1 TO KOBS;
SET EMP NOBS=KOBS POINT=I;
IF MGR = MGR_EMPNO THEN OUTPUT;
END;
RUN;
PROC SORT;BY EMPNO;RUN;
PROC PRINT;RUN;
Results |
OBS | mgr_empno | ename | empno | job | mgr | hiredate | sal | comm | deptno |
1 | 7902 | SMITH | 7369 | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7698 | ALLEN | 7499 | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
3 | 7698 | WARD | 7521 | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 |
4 | 7698 | MARTIN | 7654 | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
5 | 7566 | SCOTT | 7788 | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
6 | 7698 | TURNER | 7844 | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 |
7 | 7788 | ADAMS | 7876 | CLERK | 7788 | 1983-01-12 | 1100 | . | 20 |
8 | 7698 | JAMES | 7900 | CLERK | 7698 | 1981-12-03 | 950 | . | 30 |
9 | 7566 | FORD | 7902 | ANALYST | 7566 | 1981-12-03 | 3000 | . | 20 |
10 | 7782 | MILLER | 7934 | CLERK | 7782 | 1982-01-23 | 1300 | . | 10 |
10. Python Dfply Package
Python Programming |
# [참고] 함수 사용. (52번 예제 참고) : AttributeError: 'DataFrame' object has no attribute 'ix'
@pipe
def pull_list(df, column=-1):
return df.loc[:, column]
emp >> \
filter_by ( X.mgr.isin( emp >> filter_by(X.ename != 'KING') >> select(X.empno) >> pull_list("empno") )) >> \
head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
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 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
반응형
댓글