티스토리 뷰
7. 그룹함수
교수 테이블에서 학과별로 교수 수와 보직수당을 받는 교수 수를 출력하여라.
> SELECT deptno, COUNT(*), COUNT(comm) FROM professor GROUP BY deptno;
학과별로 소속 교수들의 평균급여, 최소급여, 최대 급여를 출력.
> SELECT deptno, AVG(sal), MIN(sal), MAX(sal) FROM professor GROUP BY deptno;
학과별 소속 교수들의 평균 급여, 최소 급여, 최대 급여를 구하여라.
> SELECT deptno, profno, sal FROM professor ORDER BY deptno;
ROLLUP, CUBE 연산자
: 다양한 형태의 그룹 조합을 생성하기 위한 연산자.
SELECT deptno, SUM(sal) FROM professor GROUP BY ROLLUP(deptno);
SELECT deptno, position, COUNT(*) FROM professor GROUP BY ROLLUP(deptno, position);
SELECT deptno, position, COUNT(*) FROM professor GROUP BY CUBE(deptno, position);
GROUPING함수
ROLLUP이나 CUBE연산자와 함께 사용하는 함수로 인수로 지정된 칼럼이 ROLLUP,이나 CUBE연산자로 생성된 그룹 조합에서 사용되었는지, 여부를 1또는 0으로 반환
SELECT deptno, grade, COUNT(*), GROUPING(deptno) grp_dno, GROUPING(grade) grp_grade FROM student GROUP BY ROLLUP(deptno, grade);
GROUPING SETS함수
GROUP BY절에서 그룹 조건을 여러개 지정할 수 있는 함수
SELECT deptno, grade, TO_CHAR(birthdate, 'yyyy') birthdate, COUNT(*) FROM student GROUP BY GROUPING SETS((deptno, grade),(deptno, TO_CHAR(birthdate, 'yyyy')));
HAVING절
: SELECT 명령문에서 조건 검색을 위해 사용되는 WHERE절의 기능과 비슷하다.
HAVING절은 GROUP BY 절에 의해 생성된 그룹을 대상으로 조건을 적용한다.
(WHERE절과 달리 HAVING절은 그룹함수를 사용할 수 있다)
ex) WHERE COUNT(*)>4 = 에러 발생.
SELECT grade, COUNT(*), ROUND(AVG(height)) avg_height, ROUND(AVG(weight)) avg_weight
FROM student
GROUP BY grade
ORDER BY avg_height DESC;
SELECT grade, COUNT(*), ROUND(AVG(height)) avg_height, ROUND(AVG(weight)) avg_weight
FROM student
GROUP BY grade
HAVING COUNT(*) > 4
ORDER BY avg_height DESC;
SQL함수의 중첩 사용
학과별 평균 몸무게중 최대 평균 몸무게만 출력.
SELECT MAX(AVG(weight)) FROM student GROUP BY deptno;
학과별 학생 수가 최대 또는 최소인 학과의 학생수 출력
SELECT MAX(COUNT(studno)) max_cnt, MIN(COUNT(studno)) min_cnt FROM student GROUP BY deptno;
'It' 카테고리의 다른 글
오라클 조건 검색 및 행의 정렬 (0) | 2023.02.27 |
---|---|
오라클 SQL함수 (0) | 2023.02.26 |
function check(f, s) { // f = update/delete // s = myform (0) | 2023.02.25 |
javascript 아이디체크 입력값 체크 (0) | 2023.02.24 |
function alert (0) | 2023.02.23 |