My Programing/DataBase
오라클 DB설계 및 활용 5일째 1번째 내용
nkdk
2008. 3. 7. 20:30
***그룸 함수 : 전체 자료를 그룹별로 구분하여 통계결과를 얻기 위한 함수
--count(),sum(),avg(),max(),min()....
--NULL값은 무시(count(*)은 예외)
SELECT SUM(SAWON_PAY) FROM SAWON; --SUM괄호 안에는 숫자가 와햐한다.
SELECT SAWON_NAME,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_JIK='과장'; --이런 식의 작업은 안된다!!!(SAWON_NAME를 써주면 안된다.)
SELECT SUM(SAWON_PAY) AS 급여합 FROM SAWON WHERE SAWON_JIK='과장';
SELECT SUM(SAWON_PAY) 합,AVG(SAWON_PAY) 평균 , MAX(SAWON_PAY) 최대급여, MIN(SAWON_PAY) 최소급여 , COUNT(SAWON_NAME)인원수 , COUNT(SAWON_JIK) , COUNT(SAWON_PAY), COUNT(SAWON_IBSAIL) ,COUNT(*) FROM SAWON ;
SELECT * FROM SAWON;
--그룹 함수는 값이 NULL인 것은 참여시키지 않는다....
SELECT SUM(SAWON_PAY)/15, SUM(SAWON_PAY)/16 FROM SAWON;
SELECT AVG(SAWON_PAY), AVG(NVL(SAWON_PAY,0)) FROM SAWON;
SELECT COUNT(*),COUNT(SAWON_NO),COUNT(SAWON_PAY) FROM SAWON;
UPDATE SAWON SET SAWON_PAY=5000 WHERE SAWON_NO=1;
--과장은 몇명?
SELECT COUNT(SAWON_JIK) 과장수 FROM SAWON WHERE SAWON_JIK='과장';
--2000이전에 입사한 남자 직원은 몇 명?
SELECT COUNT(SAWON_IBSAIL) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')<2000 AND SAWON_SEX='남';
--2000년 이후에 입사한 여자직원은 급여합, 급여평균,인원수는?
SELECT SUM(SAWON_PAY), AVG(SAWON_PAY), COUNT(SAWON_PAY) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')>=2000 AND SAWON_SEX='여';NULL인 값은?연산에 참여하지 않는다...
SELECT SUM(SAWON_PAY), AVG(NVL(SAWON_PAY,'0')), COUNT(*) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')>=2000 AND SAWON_SEX='여';NULL인 값도 연산에 참여..
--GROUP BY 절: 소계 출력
형식) SELECT 그룹컬럼명... 그룹함수()... FROM 테이블명... WHERE 조건 GROUP BY 그룹칼럼명... HAVING 출력결과조건
(SELECT 앞의 그룹명과 GROUP BY 앞의 그룹명이 같아야 한다.)
--성별 급여 평균, 인원수를 출력
SELECT AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남';
SELECT AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='여';
SELECT SAWON_SEX,AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON GROUP BY SAWON_SEX;
--부서멸 급여합
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM;
--부서별 급여합 : 급여합 8000이상인 자료
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM HAVING SUM(SAWON_PAY)>=8000;
--부서별 급여합 : 남자
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM;
--부서별 급여합 : 급여합이 5000 이상인 남자
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM HAVING SUM(SAWON_PAY)>=5000;
--주의 : GROUP BY 전에 ORDER BY 하지 마라!!!
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' ORDER BY GROUP BY BUSER_NUM;--오류
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM ORDER BY BUSER_NUM DESC;--결과에 대해서는 ORDER BY를 할 수 있다.
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM ORDER BY SUM(SAWON_PAY);
--부서별 직급별 급여합 출력
SELECT BUSER_NUM,SAWON_JIK,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM,SAWON_JIK ORDER BY BUSER_NUM;
--count(),sum(),avg(),max(),min()....
--NULL값은 무시(count(*)은 예외)
SELECT SUM(SAWON_PAY) FROM SAWON; --SUM괄호 안에는 숫자가 와햐한다.
SELECT SAWON_NAME,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_JIK='과장'; --이런 식의 작업은 안된다!!!(SAWON_NAME를 써주면 안된다.)
SELECT SUM(SAWON_PAY) AS 급여합 FROM SAWON WHERE SAWON_JIK='과장';
SELECT SUM(SAWON_PAY) 합,AVG(SAWON_PAY) 평균 , MAX(SAWON_PAY) 최대급여, MIN(SAWON_PAY) 최소급여 , COUNT(SAWON_NAME)인원수 , COUNT(SAWON_JIK) , COUNT(SAWON_PAY), COUNT(SAWON_IBSAIL) ,COUNT(*) FROM SAWON ;
SELECT * FROM SAWON;
--그룹 함수는 값이 NULL인 것은 참여시키지 않는다....
SELECT SUM(SAWON_PAY)/15, SUM(SAWON_PAY)/16 FROM SAWON;
SELECT AVG(SAWON_PAY), AVG(NVL(SAWON_PAY,0)) FROM SAWON;
SELECT COUNT(*),COUNT(SAWON_NO),COUNT(SAWON_PAY) FROM SAWON;
UPDATE SAWON SET SAWON_PAY=5000 WHERE SAWON_NO=1;
--과장은 몇명?
SELECT COUNT(SAWON_JIK) 과장수 FROM SAWON WHERE SAWON_JIK='과장';
--2000이전에 입사한 남자 직원은 몇 명?
SELECT COUNT(SAWON_IBSAIL) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')<2000 AND SAWON_SEX='남';
--2000년 이후에 입사한 여자직원은 급여합, 급여평균,인원수는?
SELECT SUM(SAWON_PAY), AVG(SAWON_PAY), COUNT(SAWON_PAY) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')>=2000 AND SAWON_SEX='여';NULL인 값은?연산에 참여하지 않는다...
SELECT SUM(SAWON_PAY), AVG(NVL(SAWON_PAY,'0')), COUNT(*) FROM SAWON WHERE TO_CHAR(SAWON_IBSAIL,'YYYY')>=2000 AND SAWON_SEX='여';NULL인 값도 연산에 참여..
--GROUP BY 절: 소계 출력
형식) SELECT 그룹컬럼명... 그룹함수()... FROM 테이블명... WHERE 조건 GROUP BY 그룹칼럼명... HAVING 출력결과조건
(SELECT 앞의 그룹명과 GROUP BY 앞의 그룹명이 같아야 한다.)
--성별 급여 평균, 인원수를 출력
SELECT AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남';
SELECT AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='여';
SELECT SAWON_SEX,AVG(SAWON_PAY),COUNT(SAWON_PAY) FROM SAWON GROUP BY SAWON_SEX;
--부서멸 급여합
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM;
--부서별 급여합 : 급여합 8000이상인 자료
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM HAVING SUM(SAWON_PAY)>=8000;
--부서별 급여합 : 남자
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM;
--부서별 급여합 : 급여합이 5000 이상인 남자
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM HAVING SUM(SAWON_PAY)>=5000;
--주의 : GROUP BY 전에 ORDER BY 하지 마라!!!
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' ORDER BY GROUP BY BUSER_NUM;--오류
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM ORDER BY BUSER_NUM DESC;--결과에 대해서는 ORDER BY를 할 수 있다.
SELECT BUSER_NUM,SUM(SAWON_PAY) FROM SAWON WHERE SAWON_SEX='남' GROUP BY BUSER_NUM ORDER BY SUM(SAWON_PAY);
--부서별 직급별 급여합 출력
SELECT BUSER_NUM,SAWON_JIK,SUM(SAWON_PAY) FROM SAWON GROUP BY BUSER_NUM,SAWON_JIK ORDER BY BUSER_NUM;