DB/명령프롬프트 - mysql

[MySQL] 집약 (count, sum, avg, max, min) / 사용순서

congs 2023. 3. 27. 09:05

⭐ 사용 순서

< 순서 >
select 검색하고자 하는 테이블의 필드명 from 검색하고자하는 테이블 명 
where 조건 (없다면 생략O)
Group by 묶고자하는 값의 필드명 (없다면 생략O)
Having 그룹의 조건 (없다면 생략O)
Order by 정렬할 필드; (없으면 생략O) → 항상 마지막에 위치

집약

: 열의 데이터를 합계, 평균 같은 집계값을 구하기 위하나 집약 함수

 

1. Count : 검색된 행의 개수

  • 보통 count()안에 pk를 넣어서 사용
  • 안에 들어가는 필드명은 상관x
  • select count(num) from 테이블명 : 테이블명의 num의 수 검색
select count(*) from student : 전체 수를 검색 = 컴퓨터의 성능에 안좋음(비추)
select count(num) from student : num의 수 검색

< 개수 >
mysql> select count(num) from student;
+------------+
| count(num) |
+------------+
|          8 |
+------------+
1 row in set (0.01 sec)

//------------------ 예 시 -------------------------------------------------

< 1. 과별 인원수 + 오름차순 정렬(기본) >
mysql> select major, count(major) from student // major, major의 수
    -> group by major //major을 그룹으로 묶기
    -> order by major; //오름차순 정렬 
+----------+--------------+
| major    | count(major) |
+----------+--------------+
| computer |            5 |
| English  |            3 |
+----------+--------------+
2 rows in set (0.00 sec)

< 2. 주소별 인원수 + 내림차순 정렬 >
mysql> select address, count(address) from student
    -> group by address
    -> order by address desc;
+---------+----------------+
| address | count(address) |
+---------+----------------+
| suwon   |              1 |
| seoul   |              3 |
| Inchen  |              4 |
+---------+----------------+
3 rows in set (0.00 sec)

/* 학과 인원수가 4명 미만인 학과 출력 */
mysql> select major from student
    -> group by major
    -> having count(major)<4;
+---------+
| major   |
+---------+
| English |
+---------+
1 row in set (0.00 sec)

 

2. Sum : 합계

  • select sum(score) from 테이블명 ; : 테이블명의 score의 합계
< 전체 점수 합계 >
mysql> select sum(score) from student;
+------------+
| sum(score) |
+------------+
|        619 |
+------------+
1 row in set (0.00 sec)


< 학과별 점수 합계 >
mysql> select major, sum(score) from student
    -> group by major;
+----------+------------+
| major    | sum(score) |
+----------+------------+
| computer |        455 |
| English  |        164 |
+----------+------------+
2 rows in set (0.00 sec)

				// 이름변경 : as
				mysql> select major, sum(score) as '점수합계' from student
				    -> group by major;
				+----------+----------+
				| major    | 점수합계 |
				+----------+----------+
				| computer |      455 |
				| English  |      164 |
				+----------+----------+
				2 rows in set (0.00 sec)

< 조건이 있는 점수 합계 >
- 학과가 computer인 점수 합계

1. where사용
mysql> select major, sum(score) as 'sum'
    -> from student where major='computer';
+----------+------+
| major    | sum  |
+----------+------+
| computer |  455 |
+----------+------+
1 row in set (0.00 sec)

			mysql> select sum(score) as "computer 학과의 합계" from student
			    -> where major='computer';
			+----------------------+
			| computer 학과의 합계 |
			+----------------------+
			|                  455 |
			+----------------------+
			1 row in set (0.00 sec)

2. having사용
mysql> select major, sum(score) as 'sum'
    -> from student group by major
    -> having(major='computer');
+----------+------+
| major    | sum  |
+----------+------+
| computer |  455 |
+----------+------+
1 row in set (0.00 sec)

 

3. Avg 평균

< 학과별 점수 합계, 평균 >

mysql> select major, sum(score) as'sum', avg(score) as 'avg'
    -> from student group by major;
+----------+------+---------+
| major    | sum  | avg     |
+----------+------+---------+
| computer |  455 | 91.0000 |
| English  |  164 | 54.6667 |
+----------+------+---------+
2 rows in set (0.00 sec)

 

4. max 최대값, min 최소값

< 학과별 합계, 평균, 최대값, 최소값 >

mysql> select major, sum(score) as 'sum',
    -> avg(score) as 'avg',
    -> max(score) as 'max',
    -> min(score) as 'min'
    -> from student group by major;
+----------+------+---------+------+------+
| major    | sum  | avg     | max  | min  |
+----------+------+---------+------+------+
| computer |  455 | 91.0000 |  100 |   70 |
| English  |  164 | 54.6667 |   87 |   20 |
+----------+------+---------+------+------+
2 rows in set (0.00 sec)