假設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