这次要记录的是昨天客户找我要一个关于注册用户年龄段,性别分布情况,当时把我卡住了,等到解决了才发现其实这个sql我大二考试的时候就写过,只是把以前是班级现在是年龄,以前是sqlserver现在是mysql而已,话不多说,解决过程如下:
首先,是我们数据库的当前内容:
然后我们要给他最终统计成三个字段:年龄男女
需要的最终统计结果图如下:
步骤1:我们要把先他统计成 年龄,性别 的结果
sql:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age
其结果如下:
步骤2:将上图的结果作为临时表,再统计成最终结果图
sql:
SELECT CONCAT(age,'岁') AS '年龄',SUM(CASE WHEN sex='男' THEN 1 ELSE 0 END) AS '男',SUM(CASE WHEN sex='女' THEN 1 ELSE 0 END) AS '女'
FROM
(
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age
) AS tt
GROUP BY age
select user_age 年龄,count(user_age) 人数,cast(cast((count(user_age)/((select count(*) from worker)*1.0)*100) as decimal(9,2)) as varchar)+'%' 所占比例 from worker group by user_age select avg(A.年龄)from
(select name as 姓名,(year(getdate())-year(出生日期)) as 年龄 from [表名] ) A
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)