일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AOP
- @JUnit
- myBatis
- unix
- spring framework
- spring
- pointcut
- Dependency Injection
- Di
- 마이바티스
- JDBC TEMPLATE
- Framework
- 리눅스
- Ubunt
- Linux
- java spring
- JdbcTemplate
- XML
- java
- 컨테이너
- Spring Boot
- SpringJDBC
- Spring JDBC
- @AspectJ
- STS
- POJO
- spring aop
- 프로퍼티
- @test
- @Spring-Test
- Today
- Total
개키우는개발자 : )
PostgreSQL 분석함수 AVG 함수 본문
실습 테이블 만들기 https://dog-developers.tistory.com/154
AVG 란?
분석함수 AVG() 부터 본격적으로 분석함수를 알아 볼 수 있습니다.
기본문법
- 사용하고자 하는 분석함수를 쓰고 대상 컬럼을 기재 후 PARTITION BY에서 값을 구하는 기준 컬럼을 작성 후
ORDER BY에서 정렬 컬럼을 기재합니다.
SELECT
C1,
분석함수(C2,C3,...) OVER(PARTITION BY C4 ORDER BY C5)
FROM TABLE_NAME;
실습
- PRODUCT 테이블의 전체 PRICE 평균 구하기.
select
AVG (PRICE)
from
PRODUCT;
- PRODUCT_GROUP 테이블과 PRODUCT 테이블을 GROUP_ID컬럼 기준으로 INNER JOIN합니다.
그 후 PRODUCT_GROUP테이블의 ->GROUP_NAME 컬럼을 기준으로 PRICE컬럼의 평균값을 구합니다.
SELECT
B.GROUP_NAME,
AVG(PRICE)
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
(A.GROUP_ID = B.GROUP_ID)
GROUP BY
B.GROUP_NAME
PRODUCT_GROUP 테이블의 GROUP_NAME 기준의 평균값이 조회 됩니다.
- 위의 실습처럼 GROUP_NAME을 기준으로 평균값을 구하지만 위에처럼 정확한 결과 값만을 조회 하는것이 아니라
GROUP_NAME과 평균도 나오고 PRODUCT 테이블의 정보도 같이 나오고 싶을때 조회 방법
SELECT
A.PRODUCT_NAME,
A.PRICE,
B.GROUP_NAME,
AVG(PRICE) OVER (PARTITION BY B.GROUP_NAME)
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
(A.GROUP_ID = B.GROUP_ID)
PRODUCT 의 정보와 PRODUCT_GROUP의 정보+평균 값이 같이 조회됩니다.
ORDER BY절이 추가되었을때 알아보기
- 위의 문법과 아래의 문법의 정렬의 값은 같습니다.
SELECT
A.PRODUCT_NAME,
A.PRICE,
B.GROUP_NAME,
AVG(PRICE) OVER (PARTITION BY B.GROUP_NAME ORDER BY B.GROUP_NAME)
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
(A.GROUP_ID = B.GROUP_ID)
정렬 하는 기준값이 PARTITION BY와 같을경우 ORDER BY를 작성하나 하지 않으나 같은 결과를 보여줍니다.
하지만 ORDER BY 정렬 기준값이 A.PRICE를 기준으로 정렬하면 값은 달라집니다.
- 같은 조건에서 ORDER BY 기준값만 A.PRICE 로 변경하여 조회합니다.
SELECT
A.PRODUCT_NAME,
A.PRICE,
B.GROUP_NAME,
AVG(PRICE) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B ON
(A.GROUP_ID = B.GROUP_ID)
결과의 값은 누적집계로 변경 됩니다.
1번 행의 LABTOP의 가격은 700이므로 1번행의 평균은 700/1 = 700 입니다.
2번 행의 LAPTOP의 가격도 700이므로 (700+700) / 2 = 700 입니다.
3번 행의 LAPTOP의 가격은 800이므로 (700 + 700 + 800) / 3 = 733.333... 입니다.
4번행의 LAPTOP 가격은 1,200이므로 (700 + 700 + 800 + 1200) = 850입니다.
이렇듯 GROUP_NAME을 기준으로 행들의 누적값의 평균을 계산하여 조회합니다.
PARTITION BY와 ORDER BY를 조합하여 여러가지의 평균값을 분석할 수 있습니다.
'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글
PostgreSQL LAG,LEAD 함수 (0) | 2019.11.09 |
---|---|
PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수 (0) | 2019.11.09 |
PostgreSQL 분석함수 (0) | 2019.11.09 |
PostgreSQL 분석 함수 실습 테이블 만들기 (0) | 2019.11.09 |
PostgreSQL CUBE 절 (0) | 2019.11.09 |