MySQL - Count Function (Aggregate Functions)

임재현·2021년 5월 6일
0

MySQL

목록 보기
27/52
post-custom-banner

UDEMY - The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp: Go from SQL Beginner to Expert를 수강하며 정리한 글

  • SELECT COUNT(*) FROM books
mysql> SELECT COUNT(*) FROM books;
+----------+
| COUNT(*) |
+----------+
|       18 |
+----------+
1 row in set (0.01 sec)

이번에는 author_fname의 수를 구해보자. 먼저 COUNT를 안쓰고 구해보자.

mysql> SELECT author_fname FROM books;
+--------------+
| author_fname |
+--------------+
| Jhumpa       |
| Neil         |
| Jhumpa       |
| Dave         |
| Dave         |
| Michael      |
| Patti        |
| Dave         |
| Neil         |
| Raymond      |
| Raymond      |
| Don          |
| John         |
| David        |
| David        |
| Dan          |
| Freida       |
| George       |
+--------------+
18 rows in set (0.00 sec)

이런 결과가 나왔다. 18개의 row가 나왔다. 이번에는 COUNT를 써서 구해보자.

mysql> SELECT COUNT(author_fname) FROM books;
+---------------------+
| COUNT(author_fname) |
+---------------------+
|                  18 |
+---------------------+
1 row in set (0.00 sec)

18개의 데이터가 있다는 것을 알려준다. 그런데 중복되는 이름들이 있다.(Dave나 Raymond...)지금 이런 중복되는 것들까지 전부 같은걸로 COUNT하고 있다. 그럼 중복을 제거하고 COUNT하고 싶을 때는 어떻게 할까? 이전에 배운 DISTINCT를 쓰면 된다.

mysql> SELECT  COUNT(DISTINCT author_fname) FROM books;
+------------------------------+
| COUNT(DISTINCT author_fname) |
+------------------------------+
|                           12 |
+------------------------------+
1 row in set (0.00 sec)

짠. 중복이 제거된 COUNT가 나왔다.
그런데 이번에는 Full Name이 다른 사람들의 COUNT를 하고싶다.

mysql> SELECT author_fname, author_lname FROM books;
+--------------+----------------+
| author_fname | author_lname   |
+--------------+----------------+
| Jhumpa       | Lahiri         |
| Neil         | Gaiman         |
| Jhumpa       | Lahiri         |
| Dave         | Eggers         |
| Dave         | Eggers         |
| Michael      | Chabon         |
| Patti        | Smith          |
| Dave         | Eggers         |
| Neil         | Gaiman         |
| Raymond      | Carver         |
| Raymond      | Carver         |
| Don          | DeLillo        |
| John         | Steinbeck      |
| David        | Foster Wallace |
| David        | Foster Wallace |
| Dan          | Harris         |
| Freida       | Harris         |
| George       | Saunders       |
+--------------+----------------+
18 rows in set (0.00 sec)

이전 글에서도 나와있지만 Dan Harris와 Freida Harris는 author_lname은 같지만 author_fname이 달라 DISTINCT로 각각 카운트를 세면 서로 다른 결과가 나온다. 이럴 때, 풀네임이 같은 사람들의 카운트를 세려면

mysql> SELECT COUNT(DISTINCT author_fname, author_lname) FROM books;
+--------------------------------------------+
| COUNT(DISTINCT author_fname, author_lname) |
+--------------------------------------------+
|                                         12 |
+--------------------------------------------+
1 row in set (0.00 sec)

이렇게 해주면 이름을 합친 것들의 DISTINCT를 구하고 COUNT해주게 된다.

이번에는 title에 'the'가 들어간 row의 수를 구해보자.
먼저 이전에 COUNT를 하지 않고 이전에 썼던 LIKE와 와일드카드를 이용해서 title들을 출력해보자.

mysql> SELECT title FROM books WHERE title LIKE '%the%';
+-------------------------------------------+
| title                                     |
+-------------------------------------------+
| The Namesake                              |
| A Hologram for the King: A Novel          |
| The Circle                                |
| The Amazing Adventures of Kavalier & Clay |
| Consider the Lobster                      |
| Lincoln In The Bardo                      |
+-------------------------------------------+
6 rows in set (0.00 sec)

6개가 나왔다. 이제 COUNT를 해보자.

mysql> SELECT COUNT(title) FROM books WHERE title LIKE '%the%';
+--------------+
| COUNT(title) |
+--------------+
|            6 |
+--------------+
1 row in set (0.00 sec)

6개가 나온 모습을 볼 수 있다.

사실 COUNT 괄호() 이안에 다른 칼럼이나 *를 써도 된다. WHERE title LIKE '%the%'여기서 조건을 줬기 때문에 이 조건에 맞는 것들만 고르고, 그걸 COUNT하기 때문이다. 그래도 이왕이면 title에 the가 들어간 거를 고르는 거기 때문에 COUNT(title)로 해주는 게 보기도 좋고 의미전달도 더 잘되고 깔끔하지 않을까 싶다.

++주의사항
COUNT와 ()사이에 띄어쓰기(' ')가 있으면 안된다. 붙여줘야함. 안그러면 문법 오류가 발생한다.

profile
임재현입니다.
post-custom-banner

0개의 댓글