포스팅 목차
83. Display the jobs which are unique to dept no 10.
* 회계부서('10')에 단독으로 존재하는 직무를 출력하시오.
- [데이터 추출] 비상관 서브 쿼리(Uncorrelated Subqueyr)를 만족하는 데이터 추출 - NOT IN 연산자
|
1. Oracle(오라클)
회계부서('10')에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
Oracle Programming |
select job
from emp
where deptno = 10
and job not in (select job from emp where deptno<>10);
Minus 연산자를 사용하여서 회계부서('10')에서 존재하는 직무 중에서 회계부서 이 외 부서에 존재하는 직무를 제외한 회계부서에만 단독으로 존재하는 직무를 출력한다.
Oracle Programming |
select job from emp where deptno=10
minus
select job from emp where deptno!=10;
2. Python Pandas(파이썬)
회계부서('10')에서 근무하는 직원들의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 단독으로 존재하는 직무를 출력한다.
Python Programming |
emp[(emp['deptno']==10) & ~ emp['job'].isin(emp[emp['deptno'] != 10]['job']) ][['job']]
Results |
job
8 PRESIDENT
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
회계부서('10') 에서 근무하는 직원들의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 단독으로 존재하는 직무를 출력한다.
R Programming |
%%R
emp[emp$deptno == 10 & ! (emp$job %in% unlist(emp[emp$deptno != '10', "job" ])),]['job']
Results |
# A tibble: 1 x 1
job
<chr>
1 PRESIDENT
4. R Dplyr Package
회계부서('10') 에서 근무하는 직원들의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 단독으로 존재하는 직무를 출력한다.
R Programming |
%%R
emp %>%
dplyr::filter( deptno==10 & ! job %in% ( emp %>% dplyr::filter( deptno != 10 ) %>% dplyr::select(job) %>% unlist() )) %>%
dplyr::select(job) # %>% pull
Results |
# A tibble: 1 x 1
job
<chr>
1 PRESIDENT
5. R sqldf Package
회계부서('10') 에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
R Programming |
%%R
sqldf("select job from emp where deptno = 10 and job not in (select job from emp where deptno<>10);")
Results |
job
1 PRESIDENT
6. Python pandasql Package
Python Programming |
ps.sqldf("select job from emp where deptno = 10 and job not in (select job from emp where deptno<>10); ")
Results |
job
0 PRESIDENT
7. R data.table Package
회계부서('10') 에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[(deptno == '10') & DT[,!job %in% unlist(DT[deptno != '10', .(job)])]][,.(job)]
Results |
job
1: PRESIDENT
8. SAS Proc SQL
회계부서('10')에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
SAS Statements |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select job
from emp
where deptno = 10 and job not in (select job from emp where deptno<>10);;
QUIT;
PROC PRINT;RUN;
Results |
OBS job
1 PRESIDEN
9. SAS Data Step
회계부서('10')에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
SAS Statements |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1;
BY JOB;
RUN;
DATA STATSAS_2;
MERGE EMP_1(KEEP=JOB DEPTNO WHERE=(DEPTNO=10) IN=A)
EMP_1(RENAME=DEPTNO=DEPTNO1 KEEP=JOB DEPTNO WHERE=(DEPTNO1=20) IN=B);
BY JOB;
IF A=1 AND B=0;
RUN;
PROC PRINT;RUN;
Results |
OBS job deptno DEPTNO1
1 PRESIDEN 10 .
10. Python Dfply Package
회계부서('10')에서 근무하는 직원의 직무 중에서 회계부서 이 외 부서에서 근무하는 직원들의 직무를 제외한 회계부서에만 존재하는 직무를 출력한다.
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.deptno == 10, ~ X.job.isin(emp >> filter_by(X.deptno !=10)>> select(X.job) >> pull_list("job")) ) >> \
select(X.job)
Results |
job
8 PRESIDENT
11. 파이썬 Base Programming
Python Programming |
# skipinitialspace : 칼럼명의 공백 제거
csv.register_dialect('csv_dialect',skipinitialspace=True,quoting=csv.QUOTE_ALL)
with open("C:/WORK/RPY_SQL/emp.csv",'r', encoding='utf-8') as csv_file:
emp_file = csv.DictReader(csv_file,dialect='csv_dialect')
emp_list = list(emp_file)
job_list = [row['job'] for row in emp_list if row['deptno'] != '10']
print(job_list)
print("----------------------------------------------------------------------------------------------------------")
filter_result = []
for item in emp_list:
# 파이썬 사전(Dictionary)에서 복수의 항목 삭제
[item.pop(key) for key in ['ename', 'mgr', 'sal', 'comm']]
if item['deptno'] == '10' and item['job'] not in job_list:
filter_result.append(item)
for x in filter_result:
print(x)
Results |
['CLERK', 'SALESMAN', 'SALESMAN', 'MANAGER', 'SALESMAN', 'MANAGER', 'ANALYST', 'SALESMAN', 'CLERK', 'CLERK', 'ANALYST']
----------------------------------------------------------------------------------------------------------
{'empno': '7839', 'job': 'PRESIDENT', 'hiredate': '1981/11/17', 'deptno': '10'}
댓글