코린이의 소소한 공부노트

[MySQL] COUNT, GROUP BY, HAVING 본문

Back-End

[MySQL] COUNT, GROUP BY, HAVING

무지맘 2023. 3. 28. 15:38

[예시에 사용한 테이블]

 


# 수학 성적이 A인 학생들의 수를 알려줘
select count(*) from student_grade where Math='A';

# 결과
count(*)
61

# 몇명의 학생들이 9명의 카카오 프렌즈 중 누굴 좋아하는지 궁금한데
# 이렇게 쓰면 되는건가?
select count(friends) from student_info;

# 결과
count(friends)
300
# 전교생의 명수가 나와버렸네..?

[COUNT]

1. count(칼럼명) as 별명 형태로 쓴다.

- 별명은 필요할 때 쓴다.

 

2. 해당 칼럼에 있는 값이 같은 행의 개수를 센다.

- 이때 칼럼값의 중복 여부와 관계없이 센다. 그렇기 때문에 2번째 쿼리의 결과가 총 전교생 수인 300으로 나온 것이다.

- 모든 행의 개수를 셀 때는 칼럼명 대신 아스타(*)를 사용하면 된다.

 

3. 칼럼값이 null일 경우에는 세지 않는다.


# 어떤 프렌즈를 몇 명의 학생들이 좋아하는지 알려줘
# 정렬 순서는 명수가 큰것부터 내림차순으로 부탁해
select friends, count(*) as cnt from student_info group by friends order by cnt desc;

# 결과
friends		cnt
Choonsik	66
Apeach		48
Muzi		41
Frodo		29
Ryan		28
Neo		28
Con		26
JayG		24
Tube		10

[GROUP BY]

1. group by 칼럼명 형태로 쓰인다.

- 여러 그룹을 만들고 싶으면 콤마(,)를 이용해 칼럼명을 나열해주면 된다.

 

2. 해당 칼럼에 같은 값을 가진 행끼리 묶어주는 역할을 한다.

 

3. 유형별로 개수를 셀 때 count와 같이 쓰인다.


# 3학년 학생들 중에서 어떤 프렌즈를 몇 명의 학생들이 좋아하는지 보여줘
select friends, count(*) as cnt from student_info where hakbeon>30000 group by friends;

# 결과
friends		cnt
Apeach		25
Choonsik	24
Neo		11
Muzi		9
Ryan		6
Con		10
JayG		9
Frodo		6

# 3학년 학생들 중에서 어떤 프렌즈를 몇 명의 학생들이 좋아하는지 알아본 다음
# 20명보다 큰 결과만 보여줘
select friends, count(*) as cnt from student_info where hakbeon>30000 group by friends
having cnt>20;

# 결과
friends		cnt
Apeach		25
Choonsik	24

[HAVING]

1. group by 뒤에 having 조건문 형태로 쓴다.

2. group by로 묶은 데이터를 처리할 때 쓰이는 조건절이다.

- where는 group by로 묶기 전 데이터를 처리할 때 쓰이는 조건절이다.

 

'Back-End' 카테고리의 다른 글

[MySQL] CASE WHEN, THEN, ELSE  (0) 2023.03.29
[MySQL] INSERT, UPDATE, DELETE  (0) 2023.03.29
[MySQL] ORDER BY, LIMIT  (0) 2023.03.18
[MySQL] 내가 겪은 오류 모음  (0) 2023.03.16
[MySQL] SELECT, FROM, WHERE  (0) 2023.03.16