终于暂时闲下来了,一个项目加班加点一年多,前面太忙就顾不上博客了,慢慢的就懈怠了,最近算是暂时闲下来了,项目已经验收进入后期维护阶段,每天空余的时间也多了,想重新拾起博客,不求写什么高深的东西,以后就尽量就每次自己遇到的问题,并把解决方法在这里记录一下,可能显得很简单不适合他人看,但是就当自己日记一样记录还是不错的,因为在这个项目里我有好几次遇到类似的以前解决过的问题,却还是要看了自己当初的百度提问才得以解答,还是要记录下比较好。
这次要记录的是昨天客户找我要一个关于注册用户年龄段,性别分布情况,当时把我卡住了,等到解决了才发现其实这个sql我大二考试的时候就写过,只是把以前是班级现在是年龄,以前是sqlserver现在是mysql而已,话不多说,解决过程如下:
首先,是我们数据库的当前内容:
然后我们要给他最终统计成三个字段:年龄男女
需要的最终统计结果图如下:
步骤1:我们要把先他统计成 年龄,性别 的结果
sql:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1sex
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,t1sex
FROM test t1
ORDER BY age
) AS tt
GROUP BY age
根据下面情况确定。
身份z号码的意义
①前1、2位数字表示:所在省份的代码,河南的省份代码是41哦!
②第3、4位数字表示:所在城市的代码;
③第5、6位数字表示:所在区县的代码;
④第7~14位数字表示:出生年、月、日;
⑤第15、16位数字表示:所在地的派出所的代码;
⑥第17位数字表示性别:奇数表示男性,偶数表示女性;
⑦第18位数字是校检码:也有的说是个人信息码,一般是随计算机随机产生,用来检验身份z的正确性。校检码可以是0~9的数字,有时也用x表示。
SELECT username, MAX((YEAR(NOW())- YEAR(出生日期))) AS age
FROM 表 GROUP BY username ORDER BY age DESC LIMIT 3
一句搞定
假设表student有如下字段:id,name,age,dormitory(宿舍号),语句可以如下写
select from student where age>(select max(tage) from (
select avg(age) age from student group by dormitory
) t
)
这个语句是我随手写的,没经过数据库验证,你自己先看一下,需要修改的地方自己稍加改动就行,大致差不多这样的
以上就是关于mysql计算表中性别为女的年龄之和全部的内容,包括:mysql计算表中性别为女的年龄之和、MYSQL中身份z号怎么确认出生日期和年龄、在mysql中怎样查询年龄最大的前3个学生年龄和姓名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)