ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MYSQL GROUP BY
    DataBase 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

    ```

     

    'DataBase' 카테고리의 다른 글

    트랜잭션 격리수준  (0) 2022.07.21
    샤딩과 파티셔닝  (0) 2022.03.19
    MySQL 대소문자 구별  (0) 2022.03.01

    댓글