MariaDB / GROUP BY

예제로 사용한 데이터베이스는 employees입니다.

GROUP BY - 사원별 급여 합계

사번과 급여를 출력하면, 다음처럼 모든 행이 출력됩니다.

MariaDB [employees]> SELECT emp_no, salary
    -> FROM salaries
    -> LIMIT 10
    -> ;
+--------+--------+
| emp_no | salary |
+--------+--------+
|  10001 |  60117 |
|  10001 |  62102 |
|  10001 |  66074 |
|  10001 |  66596 |
|  10001 |  66961 |
|  10001 |  71046 |
|  10001 |  74333 |
|  10001 |  75286 |
|  10001 |  75994 |
|  10001 |  76884 |
+--------+--------+
10 rows in set (0.00 sec)

만약 사번별로 급여의 총합을 구하고 싶다면 GROUP BY를 이용합니다.

MariaDB [employees]> SELECT emp_no, salary
    -> FROM salaries
    -> GROUP BY emp_no
    -> LIMIT 10
    -> ;
+--------+--------+
| emp_no | salary |
+--------+--------+
|  10001 |  60117 |
|  10002 |  65828 |
|  10003 |  40006 |
|  10004 |  40054 |
|  10005 |  78228 |
|  10006 |  40000 |
|  10007 |  56724 |
|  10008 |  46671 |
|  10009 |  60929 |
|  10010 |  72488 |
+--------+--------+
10 rows in set (0.01 sec)

사번만으로 누군지 파악하기 힘들다면, JOIN을 이용해서 이름을 출력할 수 있습니다.

MariaDB [employees]> SELECT salaries.emp_no, salaries.salary, employees.first_name, employees.last_name
    -> FROM salaries
    -> LEFT JOIN employees
    -> ON salaries.emp_no = employees.emp_no
    -> GROUP BY salaries.emp_no
    -> LIMIT 10
    -> ;
+--------+--------+------------+-----------+
| emp_no | salary | first_name | last_name |
+--------+--------+------------+-----------+
|  10001 |  60117 | Georgi     | Facello   |
|  10002 |  65828 | Bezalel    | Simmel    |
|  10003 |  40006 | Parto      | Bamford   |
|  10004 |  40054 | Chirstian  | Koblick   |
|  10005 |  78228 | Kyoichi    | Maliniak  |
|  10006 |  40000 | Anneke     | Preusig   |
|  10007 |  56724 | Tzvetan    | Zielinski |
|  10008 |  46671 | Saniya     | Kalloufi  |
|  10009 |  60929 | Sumant     | Peac      |
|  10010 |  72488 | Duangkaew  | Piveteau  |
+--------+--------+------------+-----------+
10 rows in set (0.00 sec)

GROUP BY - 부서별 사원 수

COUNT 함수를 이용하여 특정 조건을 만족하는 행의 개수를 셀 수 있습니다. 다음은 부서별 사원 수를 출력하는 예제입니다.

MariaDB [employees]> SELECT dept_no, COUNT(emp_no) "number"
    -> FROM dept_emp
    -> GROUP BY dept_no
    -> ;
+---------+--------+
| dept_no | number |
+---------+--------+
| d001    |  20211 |
| d002    |  17346 |
| d003    |  17786 |
| d004    |  73485 |
| d005    |  85707 |
| d006    |  20117 |
| d007    |  52245 |
| d008    |  21126 |
| d009    |  23580 |
+---------+--------+
9 rows in set (0.09 sec)

부서의 이름까지 나타내고 싶다면 JOIN을 활용합니다.

MariaDB [employees]> SELECT dept_emp.dept_no, COUNT(emp_no) "number", departments.dept_name
    -> FROM dept_emp
    -> LEFT JOIN departments
    -> ON dept_emp.dept_no = departments.dept_no
    -> GROUP BY dept_emp.dept_no
    -> ;
+---------+--------+--------------------+
| dept_no | number | dept_name          |
+---------+--------+--------------------+
| d001    |  20211 | Marketing          |
| d002    |  17346 | Finance            |
| d003    |  17786 | Human Resources    |
| d004    |  73485 | Production         |
| d005    |  85707 | Development        |
| d006    |  20117 | Quality Management |
| d007    |  52245 | Sales              |
| d008    |  21126 | Research           |
| d009    |  23580 | Customer Service   |
+---------+--------+--------------------+
9 rows in set (0.11 sec)