포스팅 목차
24. Display the names of employees who are not working as SALESMAN or CLERK or ANALYST.
* 판매직, 사무직 또는 분석직 이 외의 직원 이름을 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 필터링 & 서브쿼리] 서브쿼리 기반의 데이터 필터링
|
1. 오라클(Oracle)
- emp테이블에서 not in 연산자를 사용하여서 판매직,사무직,분석직을 제외한 사원 정보를 추출한다.
Oracle Programming |
select ename from emp
where job not in ('CLERK','SALESMAN','ANALYST');
2. 파이썬(Pandas)
- 3개 직무에 해당하는 관측치를 제외("~")한 사원 정보를 추출한다.
Python Programming |
emp[~emp['job'].isin(['CLERK','SALESMAN','ANALYST']) ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
Python Programming |
emp.loc[(~emp.job.isin(['CLERK','SALESMAN','ANALYST'])) , ["ename"]]
Results |
ename | |
3 | JONES |
5 | BLAKE |
6 | CLARK |
8 | KING |
Python Programming |
emp.query('job not in (["CLERK","SALESMAN","ANALYST"])', engine='python')[['ename']]
Results |
ename | |
3 | JONES |
5 | BLAKE |
6 | CLARK |
8 | KING |
3. R Programming (R Package)
%in% 연산자를 사용하여서 3개 직무에 해당하는 관측치를 1차적으로 선택하고, NOT 연산자 "!"를 사용하여서 3개 직무 이외에 해당하는 관측치를 선택한다.
R Programming |
%%R
emp[!emp$job %in% c('CLERK','SALESMAN','ANALYST'),"ename"]
Results |
# A tibble: 4 x 1
ename
<chr>
1 JONES
2 BLAKE
3 CLARK
4 KING
R Programming |
%%R
emp[which(!emp$job %in% c('CLERK','SALESMAN','ANALYST')), c("empno","ename") ]
Results |
# A tibble: 4 x 2
empno ename
<dbl> <chr>
1 7566 JONES
2 7698 BLAKE
3 7782 CLARK
4 7839 KING
R Programming |
%%R
subset(emp,subset= (!job %in% c('CLERK','SALESMAN','ANALYST')) , select=c(empno,ename) )
Results |
# A tibble: 4 x 2
empno ename
<dbl> <chr>
1 7566 JONES
2 7698 BLAKE
3 7782 CLARK
4 7839 KING
4. R Dplyr Package
R Programming |
%%R
emp %>% filter( !job %in% c('CLERK','SALESMAN','ANALYST') ) %>% dplyr::select(ename)
Results |
# A tibble: 4 x 1
ename
<chr>
1 JONES
2 BLAKE
3 CLARK
4 KING
- Hmisc 패키지의 Not In 연산자("%nin%")를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
R Programming |
%%R
library(Hmisc)
emp %>% filter( job %nin% c('CLERK','SALESMAN','ANALYST') ) %>% dplyr::select(ename)
Results |
# A tibble: 4 x 1
ename
<chr>
1 JONES
2 BLAKE
3 CLARK
4 KING
5. R sqldf Package
- not in 연산자를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
R Programming |
%%R
require(sqldf)
sqldf("select ename from emp where job not in ('CLERK','SALESMAN','ANALYST')")
Results |
ename
1 JONES
2 BLAKE
3 CLARK
4 KING
6. Python pandasql Package
- not in 연산자를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
Python Programming |
ps.sqldf("select ename from emp where job not in ('CLERK','SALESMAN','ANALYST')")
Results |
ename | |
0 | JONES |
1 | BLAKE |
2 | CLARK |
3 | KING |
7. R data.table Package
%in% 연산자를 사용하여서 3개 직무에 해당하는 관측치를 1차적으로 선택하고, NOT 연산자 "!"를 사용하여서 3개 직무를 제외한 관측치를 선택한다.
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[!(job %in% c("CLERK", "SALESMAN", "ANALYST")), .(ename)]
Results |
ename
1: JONES
2: BLAKE
3: CLARK
4: KING
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
SELECT A.*
FROM EMP A
where job not in ('CLERK','SALESMAN','ANALYST');
QUIT;
PROC PRINT DATA=STATSAS_1;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
2 | 7698 | BLAKE | MANAGER | 7839 | 1981-03-01 | 2850 | . | 30 |
3 | 7782 | CLARK | MANAGER | 7839 | 1981-01-09 | 2450 | . | 10 |
4 | 7839 | KING | PRESIDEN | . | 1981-11-17 | 5000 | . | 10 |
9. SAS Data Step
SAS Programming |
%%SAS sas
DATA STATSAS_2;
SET EMP;
where job not in ('CLERK','SALESMAN','ANALYST');
RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
2 | 7698 | BLAKE | MANAGER | 7839 | 1981-03-01 | 2850 | . | 30 |
3 | 7782 | CLARK | MANAGER | 7839 | 1981-01-09 | 2450 | . | 10 |
4 | 7839 | KING | PRESIDEN | . | 1981-11-17 | 5000 | . | 10 |
10. Python Dfply Package
Python Programming |
emp >> filter_by( ~ X.job.isin(['CLERK','SALESMAN','ANALYST']) )
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
Python Programming |
emp >> mask( ~ X.job.isin(['CLERK','SALESMAN','ANALYST']) )
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
5 | 7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
반응형
댓글