DataBase

MYSQL GROUP BY

AlgoPoolJa 2021. 2. 11. 14:05

MYSQL 처리 순서

MYSQL 에서 구문 처리 순서는 

FROM -> WHERE -> SELECT -> GROUP BY -> HAVING -> ORDER BY -> LIMIT 순으로이루어 져 있다. 

GROUP BY 의 위치는 무조건 FROM, WHERE 뒤에 위치해야 한다.

또한 위의 그림에서 부터 알 수 있듯이 WHERE 조건절이 연산된 후에  GROUP BY가 나오므로 GROUP BY의 조건절은 HAVING에 넣어주어야 한다. 

 

예시를 들며 설명해 보겠다. 

orders의 필드 값들

위와 같이 orders의 테이블안에 필드값이 위처럼 있다고 할 때 status의 값들을 가지고 subgroup을 만들어 보고 싶으면 

```sql

select status

from orders

group by status;

```

를 하면 된다.

그러면 위와 같은 결과가 나오는데 group by는 보다시피 중복을 허용하지 않는다. 따라서 이렇게 사용될 경우에는 distinct와 유사하게 동작 하는것을 볼 수 있다.

 

aggregate functions와 같이 사용되는 GROUP BY

aggregate functions 란 집계에서 주로 이용되는 함수를 이야기 한다.(대표적으로 SUM, COUNT, AVG 가 있다.)

aggregate functions과 같이 GROUP BY를 사용했을 경우 각각 서브 그룹에 싱글 값을 리턴해준다. 이것도 예시를 들어 설명하겠다. 

 

```sql

select status , count(*)

from orders

group by status

```

위와 같은 결과가 나오는 것을 확인 할 수 있다.

 

 

3. GROUP BY와 HAVING 절

GROUP BY를 지나고 이 그룹들을 filter시키기 위해서는 HAVING 절을 사용할 수 있다.

예를 들어 2003년 이후의 값들을 보고 싶다.면

```

select year(orderdate) as year, sum(quntityOrdered * priceEach) as price

from orders

group by orderdate

having year > 2003

```