你的位置:

问答吧

-> PHP基础

-> 问题详情

怎么分年龄段查询、统计?

人员的资料中有“出生日期”字段,问:

如何按照每5年为一个区间去查询统计人员数据?

我初步只能想到,先把所有记录都取出来,然后对每条记录遍历,计算岁数然后对应的年龄段+1。

可是这样效率比较低。请问用SQL有可能实现吗?

作者: diekiss

发布时间: 2006-06-07

每五年一个段,那起始年月呢???最好别取出来再过滤,直接让数据库计算

作者: sunjava

发布时间: 2006-06-07

这个感觉无论怎么分执行效率肯定很低

作者: 蟋蟀

发布时间: 2006-06-08

请问楼主想干啥.或许有别的办法.

作者: 游戏人间

发布时间: 2006-06-08

SELECT Year(`birthday`) x, FLOOR(Year(`birthday`)/5) AS y,birthday,sid FROM `user` WHERE birthday>0  order by y

或者

SELECT FLOOR( Year( `birthday` ) /5 ) AS y, birthday, sid

FROM `user`

WHERE FLOOR( Year( `birthday` ) /5 ) = FLOOR( 1990 /5 )

[ 本帖最后由 纯粹误会 于 2006-6-8 02:36 AM 编辑 ]

作者: 纯粹误会

发布时间: 2006-06-08

我不知道相同的运算,php和mysql哪个效率更高一些

作者: sanders_yao

发布时间: 2006-06-08

计算工龄么?

作者: zjhcloth

发布时间: 2006-06-08

CODE:

[Copy to clipboard]

$result = mysql_query("select year(`date`),count(*) from database.table group by year(`date`)");

while($row = mysql_fetch_row($result)){

!isset($year_start) && $year_start = $row[0];

if($row[0]

$nums[$year_start] += $row[1];

}else{

do{

$year_start += 5;

$nums[$year_start] = 0;

}while($year_start <= $row[0]-5);

$nums[$year_start] += $row[1];

}

}

?>[ 本帖最后由 沉默的狼 于 2006-6-8 01:38 PM 编辑 ]

作者: 沉默的狼

发布时间: 2006-06-08

year('date') 的算法似乎不是很准确,例如现在是6月,那么1月的和12月出生的人就相当于没相差了,与现实不符。

我现在做的是就业信息服务方面的软件,需要对求职人做一个统计,计算出21-25,26-30,31-35,36-40,41-450.... 如此类推的分段统计

作者: diekiss

发布时间: 2006-06-08

把year(`date`)换成year(date_add(`date`,interval 180 day))不就可以了吗?

如果要计算岁数可以把$nums[$year_start] 改成$nums[date("Y")-$year_start]

[ 本帖最后由 沉默的狼 于 2006-6-8 04:30 PM 编辑 ]

作者: 沉默的狼

发布时间: 2006-06-08

CODE:

[Copy to clipboard]

$year_start = 1901;

$thisyear = date("Y");

$thisday = date("z");

$result = mysql_query("select year(date_add(`date`,interval $thisday day)),count(*) from database.table group by year(date_add(`date`,interval $thisday day))");

while($row = mysql_fetch_row($result)){

!isset($year_start) && $year_start = $row[0];

if($row[0]

$nums[$thisyear-$year_start] += $row[1];

}else{

do{

$year_start += 5;

$nums[$year_start] = 0;

}while($year_start <= $row[0]-5);

$nums[$thisyear-$year_start] += $row[1];

}

}

?>[ 本帖最后由 沉默的狼 于 2006-6-8 04:48 PM 编辑 ]

作者: 沉默的狼

发布时间: 2006-06-08

天数还可以实时算出来

[ 本帖最后由 沉默的狼 于 2006-6-8 04:43 PM 编辑 ]

作者: 沉默的狼

发布时间: 2006-06-08

1、只year(date)/5 的算法是错误的,因为这样只计算出date归属于哪个5年组。而楼主要求的是年龄组。比如24岁今年归属20-24岁组,明年就归属25-29岁组。因此就需要在计算中引入当前时间

floor((year(now())-year(date))/5)*5

2、考虑到年龄应按周岁计算,所以需要出生年做一个校正

已知函数DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。

那么dayoyear(now())-dayofyear(date) 若为负值则生日未到,应少记一岁

所以出生年应写做if(dayoyear(now())-dayofyear(date)<0, year(date)+1, year(date))

3、把2式代入1式,并作为分组依据

4、不保证所用函数在其他数据库中可用

5、要通用时,应提出数据用php计算

6、使用php计算要慢于数据库计算。理由很简单,数据库计算后只返回数条结果;php计算时需要先获得全部数据,可能成千上万。至少交换数据的时间就要多很多了

7、注意:在使用php进行计算时不能做分组处理,以免丢失相关数据

作者: 唠叨

发布时间: 2006-06-08

版主分析得很好。我还要研究一下,因为项目用MySQL4,所以有些函数不能用

作者: diekiss

发布时间: 2006-06-19

在MySQL的手册 3.3.4.5. Date Calculations 是这样就计算年龄的:

mysql> SELECT name, birth, CURDATE(),

-> (YEAR(CURDATE())-YEAR(birth))

-> - (RIGHT(CURDATE(),5)

-> AS age

-> FROM pet;

作者: diekiss

发布时间: 2006-06-19

1、我示例的函数在mysql4.0.1就可以使用了

2、楼主示例的代码确实很简练

要点: (RIGHT(CURDATE(),5)

巧妙的利用了布尔值进行运算

注意:CURDATE()和NOW()是一样的

作者: 唠叨

发布时间: 2006-06-19

CURDATE 输出格式 ‘YYYY-MM-DD'

NOW() 输出格式 'YYYY-MM-DD HH:MM:SS'

如果用RIGHT运算,二者就有差别了

作者: diekiss

发布时间: 2006-06-19

不是还有substr吗

作者: 唠叨

发布时间: 2006-06-19

mysql年龄段统计_怎么分年龄段查询、统计?相关推荐

  1. dblink查询_分库数据如何查询统计

    分库后的计算不能直接使用SQL:异构库 SQL 函数不尽相同:JAVA 硬编码实施难度大:即使借助透明网关访问远程数据库,分库性能优化也是头疼问题. 一般常规办法: 方法1:java硬编码 简单的跨库 ...

  2. php返回mysql错误语句_[已解决]php查询mysql返回了错误的结果

    大约是不支持中文字符的原因:将mysql的所有属性都改成英文字符之后,使用mysql好了. 但是! 用mysqli写 还是会返回空(又测了下,密码框不输入或输入0都会得到登录成功的提示) 都明白了 r ...

  3. mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis

    背景:现有业务扩展字段,都存在feature字段,存在语义不清晰以及,难以利用索引查询问题 Mysql 5.7后推出利器,JSON+虚拟列,即实现了业务语义统一,也支持索引查询加速 一.简单描述 My ...

  4. mysql全文索引含义_【分针网】MySQL全文索引应用简明教程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文从以下几个方面介绍下MySQL全文索引的基础知识:1.MySQL全文索引的几个注意事项2.全文索引的语法3.几种搜索类型的简介4.几种搜索类型的实例 ...

  5. mysql分库一致性_分库分表带来的完整性和一致性问题

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在最近做的一个项目中,由于每天核算的数据量过于庞大,需要把数据库进行分库保存.当数据 ...

  6. mysql查库存_如何用SQL查询Product表中库存最低的6种商品

    展开全部 使用代码:复 DELETE的语法是制: DELETEFROMtable_name. WHERE条件. DELETE后面不跟列名.2113 INSERT一般都用: INSERTINTOtabl ...

  7. java mongo分组统计_探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics

    对服务进行实时监控,了解服务当前的运行指标和健康状态,是微服务体系中不可或缺的环节.Metrics 作为微服务的重要组件,为服务的监控提供了全面的数据基础.近日,Dubbo Metrics 发布了2. ...

  8. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示

    本篇讲解一下 如何在Vue 中使用 Echarts + 百度地图 统计 博客访问量 并且通过QQWry 解析 ip 地址 利用Echarts 展示出来 效果图如下: 1.纯真Ip地址库 QQWry 这 ...

  9. linux 统计_聊聊 Linux 的内存统计

    写在前面 本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法. 开始阅读这篇文章前,请先简单阅读下面的几篇文章. <进程眼中的线性地址空间> <线程眼 ...

最新文章

  1. 最长回文子串--马拉车(?)
  2. PostgresSQL生成UUID
  3. linux下使用automake、autoconf生成configure文件
  4. 缓冲流、转换流、序列化流
  5. 南京php培训班哪家,南京PHP培训中心哪家比较专业
  6. 伦敦银行 如何计算利息
  7. 剑指offer 栈的压入、弹出序列
  8. mw315r 虚拟服务器,水星MW315R桥接设置教程
  9. anaconda安装好tensorflow后,无法在jupyter notebook上使用的解决方法
  10. GoPro 8及旗下首款360全景运动摄像机HERO Max将发售
  11. 中职计算机英语课件ppt,语文版中职英语(基础模块 上册)Unit 7《Computers》ppt课件1.ppt...
  12. Linux学习:curl 与 wget命令
  13. win下MySQL 8.0.11 修改密码、开启远程访问
  14. 使用CSS来美化你的javafx滚动条
  15. linux的防火墙端口配置
  16. [渝粤教育] 新乡医学院 医学微生物学 参考 资料
  17. 外网远程访问群晖NAS,内网穿透
  18. IDEA java类文件左下角出现橙红色的圆形小标识
  19. 瞎猫碰死耗子解决You are using pip version 9.0.1,however version 22.1.2 is available.You should consider upgr
  20. VTK笔记-CT图像获取皮肤等值面-vtkContourFilter类的使用

热门文章

  1. 基于KNN算法的图像识别
  2. linux篇(四)linux进程(上)
  3. 计算机二级C语言学习笔记(一)
  4. 2022最新官网VMware下载安装教程(超详细)
  5. 换发型算法_AI拍照换发型软件下载-AI拍照换发型下载V999.999-西西软件下载
  6. 聊聊时代中的那些坚持
  7. 知道这些,才能搞定线下活动直播
  8. 「Hortic Res」通过预转化BBM转录因子显着提高苹果转基因效率
  9. scikit learn train_test_split的使用
  10. 【附源码下载】推荐20个开源的Java项目