MySQL에서 도메인에 값들의 갯수를 세어야 할 때가 있습니다. 그럴 때 사용할 수 있는 것이 SUM과 IF의 조합입니다.


1. 테스트할 데이터 준비



CREATE TABLE IF NOT EXISTS `count_test` (
`id` int(11) NOT NULL,
`state` enum('Y','N') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `count_test` (`id`, `state`) VALUES
(1, 'Y'),
(2, 'Y'),
(3, 'Y'),
(4, 'Y'),
(5, 'N'),
(6, 'Y'),
(7, 'N'),
(8, 'Y'),
(9, 'Y'),
(10, 'N');



2. 갯수 세기(SUM, IF)


SELECT SUM(IF(state = "Y", 1, 0)) AS y_cnt, SUM(IF(state = "N", 1, 0)) AS n_cnt FROM count_test


1. 테스트할 테이블 생성 코드

[그림 1-1] 테스트할 테이블 및 데이터


CREATE TABLE `tbl_condition_test` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `col1` INT(10) UNSIGNED NULL DEFAULT NULL,
    `col2` INT(10) UNSIGNED NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM

2. 샘플 데이터 삽입 코드

INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (1, NULL, 11);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (2, 2, 12);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (3, 3, 13);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (4, NULL, 14);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (5, 5, 15);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (6, 6, 21);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (7, 7, 22);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (8, 8, 23);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (9, NULL, 24);
INSERT INTO `test` (`id`, `col1`, `col2`) VALUES (10, 10, 25);


3. 상황을 하나 예로 들어서 조건문을 어떻게 사용하는지 알아보려고 합니다.

[예시] 만약 col1 값이 NULL이면 col2 값을 선택하고 만약 col1값이 NULL이 아니면 col1값을 선택한다.

3-1) IF 이용하기

SELECT IF( col1 IS NULL, col2, col1) FROM tbl_condition_test

3-2) IFNULL 이용하기

SELECT IFNULL(col1, col2) FROM tbl_condition_test

3-3) CASE WHEN THEN ELSE END 이용하기 

여기에는 위 조건에 하나 더 추가하여 col1 값이 10이면 100을 선택한다로 해보겠습니다.

SELECT CASE WHEN col1 IS NULL THEN col2 
			WHEN col1 = 10 THEN 100 
			ELSE col1 END
FROM tbl_condition_test


+ Recent posts