공부/인프런 - Rookiss

Part 5-2-7. SQL 입문 : 집계함수 (COUNT, SUM, AVG, MAX, MIN, DISTINCT)

셩잇님 2024. 2. 5. 20:03
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 CASE를 이용하여 C#에서 사용하는 것과 같이 if-else if-else를 이용하여 처리하는 법, 비교를 이용하여 처리하는 방법 등 관련된 다양한 내용에 대해서 알아보았다. 오늘은 집계함수에 대해서 학습해 볼 것이다. 

 


 

🧮 COUNT

 

행의 개수를 세는 집계 함수이다.

SELECT COUNT(*) --모든 행의 개수
FROM Players;

 

 *은 모든 행의 개수를 뜻한다. 이렇게 *을 파라미터로 받을 수 있는 집계 함수는 COUNT가 유일하다.

 

SELECT COUNT(birthYear) --null 은 제외하고 카운팅
FROM Players;



 COUNT를 비롯한 집계 함수들은 기본적으로 null 값은 제외하고 값을 카운팅 다. 즉, 위 코드는 null 값을 가진 birthYead 값은 제외하고 카운팅한 결과이다.


 

🧮 DISTINCT

 

 DISTINCT는 DISTINCT 뒤에 나오는 열들에 대하여 같은 값을 가진 중복된 행을 제외해준다. 또한 모든 집계함수에서 다 사용이 가능하다는 특징이 있다.

 

SELECT DISTINCT birthcity
FROM Players;

 

 birthcity 값이 같은 행은 제외하고 출력한다.

SELECT DISTINCT birthyear, birthMonth, birthday
FROM Players
ORDER BY birthYear

 

 

 DISTINCT birthyear, birthMonth, birthday는 birthYear, birthMonth, birthday 값이 모두 같은 행들만 중복으로 친다. 즉, DISTINCT는 그 뒤에 있는 모든 열에 적용된다. 3개의 열 값이 모두 다 똑같아야지만 중복으로 판정한다. 

SELECT COUNT(birthcity) --null 은 제외하고 카운팅
FROM Players;

SELECT DISTINCT COUNT(birthcity) -- COUNT 가 먼저 연산된 후 이 것에 DISTINCT 가 적용 됨
FROM Players;

 

 두 문장의 결과는 동일하다. 왜냐하면 COUNT가 먼저 연산되고난 이후에 DISTINCT가 적용되기 때문에 이미 저 사진의 출력 결과(COUNT(birthcity)의 결과)에 DISTINCT를 적용하는 것이나 마찬가지이기 때문에 별 변화가 없는 것이다. (열 이름 없음 16108에 DISTINCT 적용할 꼴.)

SELECT COUNT(DISTINCT birthcity) -- 따라서 DISTINC 가 안에 들어와야 함. 이게 옳은 표현!
FROM Players;

 

 따라서 먼저 중복을 제거하고 난 후에 카운팅을 하는 것이 올바른 과정이 되므로 위와 같이 COUNT 파라미터에 DISTINCT birthcity를 넘겨주어야 한다.

 


 

🧮 AVG, SUM

 

SELECT AVG(weight)
FROM Players;
SELECT SUM(weight) / COUNT(weight)
FROM Players;

 

 위 두 코드의 결과는 같다. 모든 weight 값의 평균을 나타낸다.

SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM Players;

 

 집계함수는 null 인 값은 제외하고 연산하기 때문에 AVG 연산도 마찬가지로 null 값을 가진 행은 제외하고 평균을 낸다. 그렇기 때문에 null 값을 0으로 치환한 후 평균에 반영되도록 위와 같이 코드를 짤 수도 있다.

 

 null 값들이 0으로 치환하여 평균에 반영되니 결과 값이 더 작아졌다.

 


 

🧮 MIN, MAX

 

SELECT MIN(weight), MAX(weight)
FROM Players;

 

 

 MIN, MAX는 다른 집계함수들과 달리 문자열이나 날짜에도 사용할 수 있는 특징이 있다.

 



반응형