假設a表為會員信息表,需要統計男性會員年齡各階段的出現的人數
CREATE TABLE `a` ( `id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR ( 255 ) NOT NULL DEFAULT '' COMMENT '會員名稱', `sex` TINYINT ( 1 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '性別,1、男 2、女', `age` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '年齡', PRIMARY KEY ( `id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
假設現在數據庫中有數據如下:
方法一:
SELECT ELT( INTERVAL ( age, 0, 20, 30, 40 ), "1-20", "21-30", "31-40", "40+" ) AS age_area, COUNT( NAME ) AS num FROM `a` WHERE sex = 1 GROUP BY ELT( INTERVAL ( age, 0, 20, 30, 40 ), "1-20", "21-30", "31-40", "40+" );
說明:
利用 interval 划出4個區間
再利用 elt 函數將4個區間分別返回一個列名
方法二:
SELECT ( CASE WHEN age >= 1 AND age <= 20 THEN "1-20" WHEN age > 20 AND age <= 30 THEN "21-30" WHEN age > 30 AND age <= 40 THEN "31~40" ELSE "40+" END ) AS age_area, count( NAME ) AS num FROM a WHERE sex = 1 GROUP BY ( CASE WHEN age >= 1 AND age <= 20 THEN "1-20" WHEN age > 20 AND age <= 30 THEN "21-30" WHEN age > 30 AND age <= 40 THEN "31~40" ELSE "40+" END );
結果: