-
MYSQL GROUP BYDataBase 2021. 2. 11. 14:05
MYSQL 에서 구문 처리 순서는
FROM -> WHERE -> SELECT -> GROUP BY -> HAVING -> ORDER BY -> LIMIT 순으로이루어 져 있다.
GROUP BY 의 위치는 무조건 FROM, WHERE 뒤에 위치해야 한다.
또한 위의 그림에서 부터 알 수 있듯이 WHERE 조건절이 연산된 후에 GROUP BY가 나오므로 GROUP BY의 조건절은 HAVING에 넣어주어야 한다.
예시를 들며 설명해 보겠다.
위와 같이 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
```
'DataBase' 카테고리의 다른 글
트랜잭션 격리수준 (0) 2022.07.21 샤딩과 파티셔닝 (0) 2022.03.19 MySQL 대소문자 구별 (0) 2022.03.01