Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

dearbeany

[MySQL] 집계함수의 결과를 group by 없이 출력하기 (OVER) 본문

Web

[MySQL] 집계함수의 결과를 group by 없이 출력하기 (OVER)

dearbeany 2022. 9. 15. 15:02

집계함수의 결과를 group by 없이 출력

 

- 평균(=집계함수)의 값을 내야하는데, 국가별로 대륙(continent)별로 두 개의 평균값을 출력해야 한다.

 

- '전세계 평균' => 국가별, 따로 그룹화할 기준 없음. (전체 gnp합) / (국가개수)

- '대륙 평균' => 대륙별, group by continent 해야 함. (대륙 별 gnp의 합) / (대륙의 개수)

 

- GROUP BY절을 사용할 경우 데이터가 변형된다! 따라서 사용X

- OVER 의 사용: GROUP BY 절을 사용하지 않고, 조회된 각 행에 그룹으로 집계된 값을 표시할 때 OVER 절과 함께 PARTITION BY 절을 사용하면 된다.

- 분석함수를 사용할 때는 OVER 절을 함께 사용해야 하며, OVER 절 내부에 PATITION BY 절을 사용하지 않으면 쿼리 결과 전체를 집계하며 PARTITION BY 절을 사용하면 쿼리 결과에서 해당 칼럼을 그룹으로 묶어서 결과를 표시한다.

 

분석함수([칼럼]) OVER(PARTITION BY 칼럼1, 칼럼2... [ORDER BY 절] [WINDOWING 절])

 

-- 12. country에서 국가별로 gnp와 함께 전세계 평균 gnp, 대륙 평균 gnp를 출력 
-- 전세계 평균
select avg(gnp) as '전세계 평균'
from country;

-- 대륙 평균
select continent, avg(gnp) as '대륙 평균'
from country
group by continent;

-- group by 없이 집계함수 사용하기
-- (1) 서브쿼리 & over() 
SELECT continent, name, 
	(SELECT AVG(gnp) FROM country) AS '전세계 평균',
    AVG(gnp) OVER (PARTITION BY continent) AS '대륙 평균'
FROM country
ORDER BY continent;

-- (2) 둘 다 over() 사용 
SELECT continent, name, gnp, 
		avg(gnp) over () as '전세계 평균',
		avg(gnp) over (partition by continent) as '대륙 평균'
from country
order by continent;

 

 

 

 

결과 : 데이터 전체의 개수인 239개의 row가 출력된다.