假设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 '性别,一、男 二、女', `age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '年龄', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
假设如今数据库中有数据以下:函数
方法一:spa
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+" );
说明
:code
interval
划出4个区间elt
函数将4个区间分别返回一个列名方法二:rem
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 );
结果
:it