포스팅 목차
93. Display employee name, deptname, salary and comm. for those Sal in between 2000 to 5000 while location is Chicago.
* 시카고에서 근무하고 급여가 2000에서 5000 사이에 위치한 직원의 정보를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- 비상관 서브쿼리(Uncorrelated Subquery) 를 만족하는 데이터 추출-비교 연산자(=) 과 Between 연산자
|
1. Oracle(오라클)
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원들을 1차적으로 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
Oracle Programming |
select empno,ename,deptno from emp
where deptno = (select deptno from dept where loc='CHICAGO')
and sal between 2000 and 5000;
2. Python Pandas(파이썬)
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 직원들을 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
Python Programming |
emp[ (emp['deptno']== (dept[dept['loc'] == 'CHICAGO']['deptno'].iloc[0]) ) &
( emp['sal'].between(2000, 5000, inclusive = True) )][['empno', 'ename','deptno']]
Results |
empno | ename | deptno |
7698 | BLAKE | 30 |
3. R Programming (R Package)
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 직원들을 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
R Programming |
%%R
emp[emp$deptno == dept[dept$loc == 'CHICAGO', c("deptno") ]$deptno & ( emp$sal > 2000 & emp$sal < 5000 ),c("empno","ename","deptno")]
Results |
# A tibble: 1 x 3
empno ename deptno
<dbl> <chr> <dbl>
1 7698 BLAKE 30
R Programming |
%%R
subset(emp,subset= ( (deptno == subset(dept,subset=(loc =='CHICAGO'),select = c("deptno"))$deptno ) &
(sal > 2000 & sal < 5000)) ,
select= c(empno,ename,deptno) )
Results |
# A tibble: 1 x 3
empno ename deptno
<dbl> <chr> <dbl>
1 7698 BLAKE 30
4. R Dplyr Package
dept 테이블에서 부서 위치가 시카고에 위치한 부서의 부서 번호를 선택하여서 emp 테이블에서 dept 테이블에서 선택된 부서 번호에 해당하는 직원들을 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
R Programming |
%%R
emp %>% dplyr::filter( deptno == ( dept %>%
dplyr::filter(loc == "CHICAGO") %>%
dplyr::select(deptno) %>%
pull(deptno))
& between(sal, 2000 , 5000) ) %>%
dplyr::select(empno,ename,deptno)
Results |
# A tibble: 1 x 3
empno ename deptno
<dbl> <chr> <dbl>
1 7698 BLAKE 30
5. R sqldf Package
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원들을 1차적으로 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
R Programming |
%%R
sqldf("select empno,ename,deptno
from emp
where deptno=(select deptno from dept where loc='CHICAGO')
and sal between 2000 and 5000;")
Results |
empno ename deptno
1 7698 BLAKE 30
6. Python pandasql Package
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원들을 1차적으로 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
Python Programming |
ps.sqldf(" select empno,ename,deptno \
from emp \
where deptno=(select deptno from dept where loc='CHICAGO') \
and sal between 2000 and 5000;")
Results |
empno | ename | deptno |
7698 | BLAKE | 30 |
7. R data.table Package
dept 테이블에서 시카고에 위치한 부서 번호를 테이블로 선택 후 emp 테이블과 내부조인(DT syntax)을 수행하여서 시카고에 위치한 부서에서 근무하는 직원들을 1차적으로 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
salgrade_DT <- data.table(salgrade)
# setkey(DT, deptno)
# setkey(dept_DT, deptno)
DT[DT[, (deptno == ( dept_DT[loc == "CHICAGO", .(deptno)]$deptno )) & sal %between% list(2000,5000)], .(empno, ename,deptno)]
Results |
empno ename deptno
1: 7698 BLAKE 30
8. SAS Proc SQL
서브쿼리로 dept 테이블에서 시카고에 위치한 부서의 부서 번호를 선택 후 emp 테이블에서 시카고에 위치한 부서에서 근무하는 직원들을 1차적으로 선택하고, 이 중에서 2000~5000 사이의 급여를 수령하는 직원의 정보를 출력하시오.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select empno,ename,deptno
from emp
where deptno=(select deptno from dept where loc='CHICAGO')
and sal between 2000 and 5000;
QUIT;
PROC PRINT;RUN;
Results |
empno | ename | deptno |
7698 | BLAKE | 30 |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=emp OUT=EMP_1;
BY deptno;
RUN;
PROC SORT DATA=dept OUT=dept_2 NODUPKEY;
BY deptno;
where dname='SALES';
RUN;
* IF 구문에서는 between 지원 안함;
DATA STATSAS_2;
MERGE EMP_1(IN=A) dept_2(IN=B);
BY deptno;
IF A AND B and sal >= 2000 and sal <= 5000 THEN OUTPUT;
keep empno ename deptno;
RUN;
PROC PRINT;RUN;
Results |
empno | ename | deptno |
7698 | BLAKE | 30 |
SAS Programming |
%%SAS sas
PROC SORT DATA=emp OUT=EMP_1;
BY deptno;
RUN;
PROC SORT DATA=dept OUT=dept_2 NODUPKEY;
BY deptno;
where dname='SALES';
RUN;
DATA STATSAS_3;
MERGE EMP_1(IN=A where=(sal between 2000 and 5000)) dept_2(IN=B);
BY deptno;
IF A AND B THEN OUTPUT;
keep empno ename deptno;
RUN;
PROC PRINT;RUN;
Results |
empno | ename | deptno |
7698 | BLAKE | 30 |
10. Python Dfply Package
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") ),
between(X.sal, 2000, 5000) ) >> \
select(X.empno, X.ename)
Results |
empno | ename |
7698 | BLAKE |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 추출] 내부 조인(Inner Join)을 만족하는 데이터 추출 - 95 (0) | 2022.09.27 |
---|---|
[데이터 추출] 비등가 내부 조인(Inner Join)을 만족하는 데이터 추출 - 94 (0) | 2022.09.27 |
[데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교 연산자(=) - 92 (0) | 2022.09.27 |
[데이터 추출] 내부 조인(Inner Join)을 만족하는 데이터 추출 - 91 (0) | 2022.09.27 |
[데이터 추출] Where 조건절을 만족하는 데이터 추출 - 90 (1) | 2022.09.26 |
댓글