반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

[SQL][SELECT 명령어] aggregate 함수를 이용한 검색. 본문

IT/Database

[SQL][SELECT 명령어] aggregate 함수를 이용한 검색.

현무랑 니니 2016. 4. 17. 01:29
반응형


이전 글에서 SQL의 SELECT 명령어의 기본적인 사용법을 알아보았다.

SELECT 명령어는 SELECT FROM WHERE 블럭이라고도 한다.

SELECT절은 나타낼 컬럼만 보여주는 정도만 알아보았고 주로 WHERE 절에서 검색 조건을 명시하였다.


이번 글에서는 SELECT 명령에서 집계 함수(Aggregate function)를 사용하여 계산을 수행하는 방법을 설명한다.

예를 들어 특정 컬럼의 합계 또는 평균을 필요로 할 때 , 집계 함수를 사용하여  계산할 수 있다.

집계 함수를 이용한 검색은 여려 행들의 그룹을 모아 그룹 별로 단 하나의 결과를 돌려준다.


집계 함수는 다음과 같다.

 집계 함수

 설명

 NULL 값

 COUNT(*)

 행의 수를 반환.

 포함

 COUNT(표현식)

 표현식의 값이 NULL인 것을 제외한 행의 수를 반환.

 제외

 SUM([DISTINCT | ALL] 표현식)

 표현식의 값이 NULL인 것을 제외한 합계를 반환.

 제외

 MAX([DISTINCT | ALL] 표현식)

최대값을 반환.

 -

 MIN([DISTINCT | ALL] 표현식)

 최소값을 반환

 -

 AVG([DISTINCT | ALL] 표현식)

 표현식의 값이 NULL인 것을 제외한 평균를 반환.

 제외

 ROUND([DISTINCT | ALL] 표현식)

 열 이름과 소수 자리수의 매개변수를 가지며

 열의 값을 반올림한 결과를 반환한다.

 -

 STDDEV([DISTINCT | ALL] 표현식)

 표준 편차를 반환.

 -

 VARIANT([DISTINCT | ALL] 표현식)

 분산을 반환.

 -


0. 사용할 table

  aggregate_fn.xlsx

 fake_apps 테이블의 스키마와 그 내용.


1. COUNT

예1) COUNT(*)

-. SELECT 문이 반환할 레코드의 개수를 반환한다. 

SELECT COUNT(*) FROM fake_apps;

-. 실행결과

COUNT(*)

200


예2) GROUP BY 절과 같이 사용될 때.

-. 동일한 price를 가진 그룹 별 레코드의 개수를 표시. 

SELECT price, COUNT(*) FROM fake_apps

GROUP BY price;

-. 실행결과

price

COUNT(*)

0

73

0.99

43

1.99

42

2.99

21

3.99

9

14.99

12


2. SUM

예1) SUM(*)

-. 모든 앱들을 내려받은 회수를 반환한다. 

SELECT SUM(downloads) FROM fake_apps;

-. 실행결과

SUM(downloads)
3322760


예2) SUM(표현식)

-. 모든 앱들을 내려받은 회수를 반환한다. 

SELECT SUM(downloads) FROM fake_apps

GROUP BY price;

-. 실행결과

priceSUM(downloads)
0.01150645
0.99686775
1.99712009
2.99372233
3.99168675
14.99232423


3. MAX

예1) MAX(downloads)

-. 가장 인기 있는 즉, 내려받은 회수가 많은 앱을 반환한다. 

SELECT MAX(downloads) FROM fake_apps;

-. 실행결과

MAX(downloads)
31090


예2) MAX(downloads)과 GROUP BY를 함께 이용.

-. 각 가격 별 가장 인기 있는 즉, 내려받은 회수가 많은 앱을 반환한다. 

SELECT price, name, category, MAX(downloads) FROM fake_apps

GROUP BY price;

-. 실행결과

pricenamecategoryMAX(downloads)
0.0LathouseTravel31090
0.99FasezapLifestyle30829
1.99GreenzoneSocial Networking30986
2.99waretamCatalogs31087
3.99TamplamHealth & Fitness31075
14.99LadexFood & Drink30789


4. MIN

예1) MIN(downloads)

-. 주어진 컬럼의 가장 작은 값 반환한다. 

SELECT MIN(downloads) FROM fake_apps;

-. 실행결과

MIN(downloads)
1387


예2) MIN(downloads)과 GROUP BY를 함께 이용.

-. 각 가격 별 가장 인기 없는 즉, 내려받은 회수가 가장 적은 앱을 반환한다. 

SELECT price, name, category, MIN(downloads) FROM fake_apps

GROUP BY price;

-. 실행결과

pricenamecategoryMIN(downloads)
0.0DuodoxMusic1654
0.99SuperfanGames2791
1.99ConebaseSports1923
2.99TamptomEducation5918
3.99ZimlaneMusic1387
14.99OpetechTravel4940


5. AVG

예1) AVG(downloads)

-. 주어진 컬럼의 가장 작은 값 반환한다. 

SELECT AVG(downloads) FROM fake_apps;

-. 실행결과

AVG(downloads)
16613.8


예2) AVG(downloads)과 GROUP BY를 함께 이용.

-. 각 가격 별 가장 인기 없는 즉, 내려받은 회수가 가장 적은 앱을 반환한다. 

SELECT price, name, category, AVG(downloads) FROM fake_apps

GROUP BY price;

-. 실행결과

pricenamecategoryAVG(downloads)
0.0PlusvolzimNews15762.2602739726
0.99BiotexSports15971.511627907
1.99ZoticeCatalogs16952.5952380952
2.99ontocodeGames17725.380952381
3.99StripplexLifestyle18741.6666666667
14.99Inch-toneGames19368.5833333333


예3) AVG(downloads) 결과를 지정된 자리수로 반올림해서 표시.

-. 각 가격 별 가장 인기 없는 즉, 내려받은 회수가 가장 적은 앱을 반환한다. 

SELECT price, name, category, ROUND(AVG(downloads), 2) FROM fake_apps

GROUP BY price;

-. 실행결과

pricenamecategoryROUND(AVG(downloads), 2)
0.0PlusvolzimNews15762.26
0.99BiotexSports15971.51
1.99ZoticeCatalogs16952.6
2.99ontocodeGames17725.38
3.99StripplexLifestyle18741.67
14.99Inch-toneGames19368.58


예4) AVG(downloads) 결과를 정수로 반올림해서 표시.

-. 각 가격 별 가장 인기 없는 즉, 내려받은 회수가 가장 적은 앱을 반환한다. 

SELECT price, name, category, ROUND(AVG(downloads), 2) FROM fake_apps

GROUP BY price;

-. 실행결과

pricenamecategoryROUND(avg(downloads))
0.0PlusvolzimNews15762.0
0.99BiotexSports15972.0
1.99ZoticeCatalogs16953.0
2.99ontocodeGames17725.0
3.99StripplexLifestyle18742.0
14.99Inch-toneGames19369.0


반응형
Comments