Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

햄코딩

SQL DAY 3 본문

SQL

SQL DAY 3

햄코딩 2022. 5. 12. 09:29
220512 DAY 20 정리중

■ 그룹 함수 

  • 하나 이상의 행을 그룹으로 묶어 하나의 결과로 나타낸다.
  • 그룹 함수는 수행 결과가 다중행 (단일행 함수는 수행 결과가 단일행)
  • SUM, AVG, COUNT, MAX, MIN, STDDEV, VARIANCE
  • GROUP BY, HAVING

 

■ GROUP BY 

  • 특정 그룹을 만들어서, 그 그룹 안에서 계산한다.
  • group by 뒤에 오는 속성을 기준으로 그룹을 만든다.
  • group by 뒤에 오는 속성은 ,(comma)를 사용하여 여러 개 올 수 있다.
💡 주의
1. group by는 그룹 함수와 함께 사용한다.
2. group by의 위치는 order by 앞
3. group by의 select 절에는 그룹 함수와 group by 뒤에 오는 속성만 올 수 있다.
1. max, min, sum, avg, count
select max(sal) from emp;--최대값
select min(sal) from emp;--최소값
select sum(sal) from emp;--합계
select avg(sal) from emp;--평균
select trunc(avg(sal), 2) from emp;--평균 소수점 두자리로 절삭
select count(sal) from emp;--월급 받는 사람 수

2. 그룹함수는 단일 속성과 함께 쓸 수 없다. 
--누가 max(sal)을 가질까?
select ename, max(sal) from emp;--error

--ename은 14개가 존재, max(sal)은 14개를 합친 하나이므로, 둘은 같이 쓸 수 없다.
select ename, max(sal) from emp group by ename;--모든 그룹 다 나옴.
select job, max(sal) from emp group by ename;--error, group by 기준 속성 아니면 에러
select deptno, max(sal) from emp group by deptno;--각 부서별 max(sal)값이 나옴.
select job, sum(sal) from emp group by job;--각 직위별 sum(sal)값이 나옴.
select job, max(sal), min(sal), sum(sal), avg(sal), count(sal) from emp group by job;
select deptno, max(sal), min(sal), sum(sal), trunc(avg(sal), 2), count(sal) 
    from emp group by deptno;

3. group by된 조회 결과를 order by해서 정렬하는 것이다.
select deptno, sum(sal) from emp group by deptno order by deptno;
select deptno, sum(sal) from emp order by deptno group by deptno; --error

 

HAVING

  • group by에 조건절을 만드는 명령어
  • select문에서 where의 역활과 비슷
  • group by의 결과에 대해서 where처럼 출력 결과에 조건을 건다.
  • having deptno = 10; having sum(sal) > 9000;
  • having + 조건 기준 속성 + 비교연산자 + 조건비교값
  • 조건 기준 속성 : group 함수와 group by의 기준 속성만 온다.
  • group by의 select 절에는 group 함수와 group by의 기준 속성만 온다.
  • and, or를 통해 조건을 확장할 수 있다.
----> GROUP BY로 SAL의 합계 조회
SELECT DEPTNO, SUM(SAL) FROM EMP GROUB BY DEPTNO;

----> GROUP BY 로 조회된 결과에 대해서 조건을 제한 (9000보다 큰 월급 합계)
SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL) > 9000;

SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL) > 9000 AND DEPTNO = 20;
SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL) > 9000 OR DEPTNO = 10;

----> EMP 테이블에서 DEPTNO 별 SAL 평균값을 구한다. (단, SAL 평균값이 2000이상인 것만 표시)
SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) >= 2000;

'SQL' 카테고리의 다른 글

SQL DAY 5  (0) 2022.05.16
SQL DAY 4  (0) 2022.05.13
SQL DAY 2  (0) 2022.05.11
SQL DAY 1  (0) 2022.05.10