inblog logo
|
jay0628
    Database

    [DB]4. SELECT 복수행 함수

    김주희's avatar
    김주희
    Feb 26, 2025
    [DB]4. SELECT 복수행 함수
    Contents
    1. 세로 연산 원리2. Group by 해서 연산하기3. 복수행 함수

    1. 세로 연산 원리

    ❗
    그룹 함수를 쓰면 세로 연산된다.
    세로 연산되면 새로운 하나의 줄을 만들어낸다 (프로젝션 아님)
    새로운 줄에, 다른 컬럼이 표현되고, 값이 같으면 squash 된다.
    그룹핑 과정 예시
     

    2. Group by 해서 연산하기

    • 전체 행을 세로 연산하려면? - sum, max, min, count, avg (그룹 함수)
    • 특정 행들을 세로 연산하려면? - where & 그룹 함수
    • 특정 그룹만 세로 연산하려면? - where & 그룹 함수
    • 그룹별로 세로 연산하려면? - group by & 그룹 함수
    ❗
    Group by, Union All
     

    3. 복수행 함수

    1. 그룹 함수

    -- 세로 연산 -- 1. 그룹 함수 select avg(height) from student; select count(height) from student; select sum(height) from student; select min(height) from student; select max(height) from student;
    notion image
    notion image
    notion image
    notion image
    notion image
     

    2. 원하는 행만 세로 연산하기

    -- 2. 원하는 행만 세로 연산하기 select avg(weight) from student where year(birthday) = 1975;
    notion image
     
    select floor(avg(pay)) from professor where position = "정교수";
    notion image
     
    -- projection(X) 연산(O) -> 그룹함수 옆에 컬럼 수가 불가 -- 새로운 행에 avg연산 결과가 있는 것 select avg(height) from student;
    notion image
     

    3. 그룹핑 하기

    -- 3. 그룹핑 하기 (서브쿼리로 해결하는게 좋다) -- 스쿼시 가능하기 때문에 deptno 출력됨 select avg(sal), deptno from emp where deptno = 10 union all select avg(sal), deptno from emp where DEPTNO = 20 union all select avg(sal), deptno from emp where deptno = 30; select avg(sal), deptno from emp group by deptno;
    notion image
     

    4. 그룹핑 원리 실습

    -- 4. 그룹핑 원리 실습 -- 학년별 키의 평균 select avg(height), grade from student group by grade;
    notion image
     
    ❗
    주민번호(jumin) 앞 두 자리 또한 학년(grade)에 따라 같은 값이므로 주민번호(앞 두 자리) 하나의 값으로 squash 가능하다.
    -- group by -> grade로 정렬부터 됨 select avg(height), grade, substr(jumin,1,2) from student group by grade, substr(jumin,1,2);
    notion image
     
    select job, deptno, avg(sal) from emp group by job, deptno;
    notion image
     

    +)having

    • having: 그룹핑된 거에 대한 where 조건
    -- 그룹핑된 거에 대해서 where과 같은 기능을 쓰고 싶을 때 = having select job, deptno, avg(sal) from emp group by job, deptno having deptno != 10;
    notion image
     
    -- 평균 연봉이 2000이상인 부서는? select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;
    notion image
     
     
    전체
    -- 세로 연산 -- 1. 그룹 함수 select avg(height) from student; select count(height) from student; select sum(height) from student; select min(height) from student; select max(height) from student; -- 2. 원하는 행만 세로 연산하기 select avg(weight) from student where year(birthday) = 1975; select floor(avg(pay)) from professor where position = "정교수"; -- projection(X) 연산(O) -> 그룹함수 옆에 컬럼 수가 불가 -- 새로운 행에 avg연산 결과가 있는 것 select avg(height) from student; -- 3. 그룹핑 하기 (서브쿼리로 해결하는게 좋다) -- 스쿼시 가능하기 때문에 deptno 출력됨 select avg(sal), deptno from emp where deptno = 10 union all select avg(sal), deptno from emp where DEPTNO = 20 union all select avg(sal), deptno from emp where deptno = 30; select avg(sal), deptno from emp group by deptno; select * from emp; -- 4. 그룹핑 원리 실습 -- 학년별 키의 평균 select avg(height), grade from student group by grade; -- group by -> grade로 정렬부터 됨 select avg(height), grade, substr(jumin,1,2) from student group by grade, substr(jumin,1,2); select job, deptno, avg(sal) from emp group by job, deptno; -- 그룹핑된 거에 대해서 where과 같은 기능을 쓰고 싶을 때 = having select job, deptno, avg(sal) from emp group by job, deptno having deptno != 10; -- 평균 연봉이 2000이상인 부서는? select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;
    Share article

    jay0628

    RSS·Powered by Inblog