Programming/SQL

GROUP BY 절의 활용과 집계함수 count, average, sum. 2021-08-09.

최동훈1 2021. 8. 9. 16:39

우선 hit 을 위주로 집계함수의 사례를 보이기 위해서 칼럼을 업데이트 했다. 처음에는 insert into 문을 쓰려다가, 이건 행을 업데이트 하는 것이 아닌 새로운 행을 만드는 것이라는 것을 인지하고 update member set hit=1 where pwd=1234; 이 쿼리를 써서 hit 필드를 업데이트 했다.

hit 에 새로운 값을 업데이트 함.

select count(gender) from member;

이러면 원래 6이라는 값이 나와야 하는데 결과는

이렇게 나온다. 위 쿼리의 의미는 member 테이블 중 null 이 아닌 gender 필드의 존재 횟수이다.

select name, count(gender) from member group by name;

이렇게 하면, 집계의 주체가 name 이고 집계의 대상이 gender가 된다. 무슨뜻인지 모르겠다면 결과셋을 보자.

내가 name 이라고 group by 절 뒤에 붙이니, 이름별로 집계를 해서 나왔다.

select name, count(hit) from member group by name;

즉 count( column ) 함수는 해당 칼럼이 테이블 스페이스에 몇개 존재하는지 출력된다. 그런데 만약, 특정 필드별 집계를 하고 싶을 떄는, group by 절을 통해, 특정 필드별로 묶어서 집계한다.

 

집계함수에는 count 말고도 sum, average 등이 있는데 sum,average는 count 와 달리 칼럼안의 값이 '숫자' 일때만 가능하다. 당연한 것이 count함수는 그 칼럼이 존재하는 횟수를 뽑는 것이고, sum과 average는 그 칼럼 안의 값의 덧셈과 평균을 구하는 것이다.

 

select sum(hit) from member;

 이러면 hit의 모든 값이 더해진다.

모든 hit값을 더함

그러나 gender 칼럼 을 파라미터로 넘겨줘버리면, 에러가 난다. 왜냐? gender안의 값이 숫자가 아니기 때문이다.

또한 select 문에서 구절이 오는 문법적 순서가 있듯이, 이번엔 컴퓨터가 읽어드리는 순서가 있다.

문법적 순서:

select -> from ->where ->group by -> having-> order by.

 

컴퓨터가 읽는 순서.

from -> where -> group by ->having->  select -> order by. 순이다.

즉, select 문에 별칭을 붙이면, 그 별칭으로 해당 칼럼을 지칭할수 있는 구절은, select 뒤에오는 order by 절 뿐이다. 나머지 구절은 별칭이 아닌 원래 이름 그대로 써 줘야 한다.

또한 이번에 처음 안 사실인데, from 절 뒤에도 별칭을 붙일 수 있고, 이 별칭은 순서상 맨 앞이므로, 차후의 모든 구절에서 사용할 수 있다.(다음포스트에서 내가 쿼리문을 작성해보았음.)

 

공부시간 1시간

순공시간 40분.

 

오늘 오후에 병원 간다고 오전 공부밖에 못했다...ㅠ