포스팅 목차
167. display the department where there are no employees
* 인사 정보(‘EMP’)테이블을 조회하여 부서 정보(‘DEPT’)테이블에서 별도의 부서원이 존재하지 않는 부서 정보를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 추출] 특정 조건을 만족하는 데이터 추출 - 비상관 서브쿼리(중복 제거를 통한 유일한 값 추출), Not in 연산자
- 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
- 유사문제 : 81 / 82 / 86 / 111/ 112/ 118 /131/ 134/ 120/ 137/ 138/ 151/ 158
- distinct : 82
|
1. Oracle(오라클)
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.
Oracle Programming |
select deptno,dname
from dept
where deptno not in (select distinct(deptno) from emp);
2. Python Pandas(파이썬)
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하여 반환되는 부서코드(‘deptno’)가 존재하는 부서를 제외(‘~’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.
Python Programming |
dept[~ dept['deptno'].isin(emp['deptno'].unique())]
Results |
deptno | dname | loc | |
3 | 40 | OPERATIONS | BOSTON |
3. R Programming (R Package)
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하여 반환되는 부서코드(‘deptno’)가 존재하는 부서를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.
R Programming |
%%R
dept[! (dept$deptno %in% unlist(unique(emp['deptno']))), ]
Results |
# A tibble: 1 x 3
deptno dname loc
<dbl> <chr> <chr>
1 40 OPERATIONS BOSTON
4. R Dplyr Package
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하는 부서코드(‘deptno’)를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.
R Programming |
%%R
dept %>%
dplyr::filter( ! deptno %in% ( emp %>% dplyr::distinct(deptno) %>% unlist() ))
Results |
# A tibble: 1 x 3
deptno dname loc
<dbl> <chr> <chr>
1 40 OPERATIONS BOSTON
5. R sqldf Package
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.
R Programming |
%%R
sqldf(" select deptno,dname
from dept
where deptno not in (select distinct(deptno) from emp); ")
Results |
deptno dname
1 40 OPERATIONS
6. Python pandasql Package
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.
Python Programming |
ps.sqldf(" select deptno,dname from dept \
where deptno not in (select distinct(deptno) from emp); ")
Results |
deptno | dname | |
0 | 40 | OPERATIONS |
7. R data.table Package
부서 정보(‘dept_DT’)테이블의 부서번호(‘deptno’)가 인사 정보(‘DT’)테이블의 부서번호(‘deptno’)에 존재하는 부서코드(‘deptno’)를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
dept_DT[!deptno %in% unlist(unique(DT[,.(deptno)]))]
Results |
deptno dname loc
1: 40 OPERATIONS BOSTON
8. SAS Proc SQL
부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select deptno,dname,loc
from dept
where deptno not in (select distinct(deptno) from emp);
QUIT;
PROC PRINT;RUN;
Results |
OBS | deptno | dname | loc |
1 | 40 | OPERATIONS | BOSTON |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=dept OUT=dept_1;
BY deptno;
RUN;
PROC SORT DATA=emp OUT=emp_1 nodupkey;
BY deptno;
RUN;
DATA STATSAS_2;
MERGE dept_1(IN=A) emp_1(IN=B);
BY deptno;
IF A AND B=0;
keep deptno dname loc;
RUN;
PROC SORT DATA=STATSAS_2;
BY deptno;
RUN;
PROC PRINT;RUN;
Results |
OBS | deptno | dname | loc |
1 | 40 | OPERATIONS | BOSTON |
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]
dept >>\
filter_by (~ X.deptno.isin( emp >> distinct(X.deptno) >> pull_list("deptno")))
Results |
deptno | dname | loc | |
3 | 40 | OPERATIONS | BOSTON |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
댓글