Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 특정 값을 가진 열의 개수를 계산하는 방법

MySQL에서 여러 열에 걸쳐 특정 값(예: 1)이 총 몇 번 등장하는지, 또는 모든 열이 특정 값을 만족하는 행이 몇 개인지 확인해야 할 때가 있습니다. 이럴 때 SUM() 함수와 산술·논리 연산자를 함께 사용하면 간단하게 해결할 수 있습니다.

기본 문법

select
sum(yourColumnName1+yourColumnName2+yourColumnName3...N) as `anyAliasName1`,
sum(yourColumnName1 and yourColumnName2 and yourColumnName3....N) as anyAliasName
from yourTableName;

두 방식의 차이는 다음과 같습니다.

  • + 연산자: 각 행마다 열들의 값을 더한 뒤 전체 합계를 구합니다. 즉, 1이 등장한 총 횟수를 반환합니다.
  • AND 연산자: 모든 열이 1일 때만 1로 평가되므로, 세 열이 모두 1인 행의 개수를 반환합니다.

예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table demo36
-> (
-> id int not null auto_increment primary key,
-> value1 int,
-> value2 int,
-> value3 int
-> );
Query OK, 0 rows affected (1.68 sec)

데이터 삽입

INSERT 명령어를 사용해 샘플 레코드를 추가합니다.

mysql> insert into demo36(value1,value2,value3) values(1,0,0);
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo36(value1,value2,value3) values(1,0,1);
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo36(value1,value2,value3) values(1,1,1);
Query OK, 1 row affected (0.22 sec)

mysql> insert into demo36(value1,value2,value3) values(0,1,0);
Query OK, 1 row affected (0.12 sec)

mysql> insert into demo36(value1,value2,value3) values(1,1,0);
Query OK, 1 row affected (0.10 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 내용을 조회해 보겠습니다.

mysql> select * from demo36;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+--------+--------+--------+
| id | value1 | value2 | value3 |
+----+--------+--------+--------+
| 1  | 1      | 0      | 0      |
| 2  | 1      | 0      | 1      |
| 3  | 1      | 1      | 1      |
| 4  | 0      | 1      | 0      |
| 5  | 1      | 1      | 0      |
+----+--------+--------+--------+
5 rows in set (0.00 sec)

특정 값이 있는 열 개수 계산 쿼리

이제 MySQL에서 특정 값(1)을 가진 열의 개수를 계산하는 실제 쿼리입니다.

mysql> select
-> sum(value1+value2+value3) as `Total_Number_Of_1`,
-> sum(value1 and value2 and value3) as `Total_Number_Of_Rows_With_1`
-> from demo36;

실행 결과는 다음과 같습니다.

+-------------------+-----------------------------+
| Total_Number_Of_1 | Total_Number_Of_Rows_With_1 |
+-------------------+-----------------------------+
|                 9 |                           1 |
+-------------------+-----------------------------+
1 row in set (0.00 sec)

결과 해석

  • Total_Number_Of_1 = 9: + 연산자를 사용했기 때문에 전체 데이터에서 1이 등장한 총 횟수를 의미합니다.
  • Total_Number_Of_Rows_With_1 = 1: AND 연산자를 사용했기 때문에 value1, value2, value3가 모두 1인 행(id=3)만 카운트된 것입니다.

이처럼 SUM() 함수에 어떤 연산자를 조합하느냐에 따라 '값의 총 개수'와 '조건을 만족하는 행 수'를 목적에 맞게 손쉽게 구할 수 있습니다.