MySQL에서는 집계 함수 COUNT()를 활용하면 테이블의 한 행에 있는 여러 컬럼 값을 가로 방향으로 세어 합산할 수 있습니다. 이 글에서는 예제 테이블을 만들고, 각 컬럼에서 조건을 만족하는 값의 개수를 구하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 정수형 컬럼 네 개를 가진 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstValue int,
SecondValue int,
ThirdValue int,
FourthValue int
);
Query OK, 0 rows affected (0.59 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용해 두 개의 레코드를 추가합니다.
mysql> insert into DemoTable(FirstValue,SecondValue,ThirdValue,FourthValue) values(-18,45,0,155); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable(FirstValue,SecondValue,ThirdValue,FourthValue) values(0,235,null,15); Query OK, 1 row affected (0.20 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+------------+-------------+------------+-------------+ | Id | FirstValue | SecondValue | ThirdValue | FourthValue | +----+------------+-------------+------------+-------------+ | 1 | -18 | 45 | 0 | 155 | | 2 | 0 | 235 | NULL | 15 | +----+------------+-------------+------------+-------------+ 2 rows in set (0.00 sec)
4. 가로 방향 값 개수 계산하기
이제 각 컬럼에서 0보다 큰 값이 몇 개인지 가로 방향으로 집계하는 쿼리입니다.
mysql> SELECT COUNT(FirstValue > 0 OR NULL) + COUNT(SecondValue > 0 OR NULL) + COUNT(ThirdValue > 0 OR NULL) + COUNT(FourthValue > 0 OR NULL) AS TOTAL_VALUE FROM DemoTable;
실행 결과는 다음과 같습니다.
+-------------+ | TOTAL_VALUE | +-------------+ | 4 | +-------------+ 1 row in set (0.00 sec)
동작 원리
이 쿼리가 작동하는 이유는 MySQL의 COUNT() 함수가 NULL이 아닌 값만 세기 때문입니다. 조건식 FirstValue > 0 OR NULL은 조건이 참일 때 1을 반환하고, 거짓일 때 NULL을 반환합니다. 따라서 COUNT()는 조건을 만족하는 값만 카운트하게 됩니다.
위 예제에서는 첫 번째 행의 45, 155와 두 번째 행의 235, 15, 즉 총 4개의 값이 0보다 크므로 결과로 4가 반환됩니다. 음수(-18), 0, NULL 값은 모두 제외됩니다.
이 패턴은 SUM(CASE WHEN ... THEN 1 ELSE 0 END)을 사용하는 대안보다 코드가 간결하며, 여러 컬럼의 조건부 개수를 하나의 쿼리에서 손쉽게 합산할 때 유용하게 활용할 수 있습니다.