zoukankan      html  css  js  c++  java
  • 工作中遇到的问题——mysql关于年龄,性别的统计

    终于暂时闲下来了,一个项目加班加点一年多,前面太忙就顾不上博客了,慢慢的就懈怠了,最近算是暂时闲下来了,项目已经验收进入后期维护阶段,每天空余的时间也多了,想重新拾起博客,不求写什么高深的东西,以后就尽量就每次自己遇到的问题,并把解决方法在这里记录一下,可能显得很简单不适合他人看,但是就当自己日记一样记录还是不错的,因为在这个项目里我有好几次遇到类似的以前解决过的问题,却还是要看了自己当初的百度提问才得以解答,还是要记录下比较好。

    这次要记录的是昨天客户找我要一个关于注册用户年龄段,性别分布情况,当时把我卡住了,等到解决了才发现其实这个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
    

    写在最后:

    当然实际工作中的数据并不是这样,但是大体上差不多,只是多了一些条件而已,比如xx时间之前注册的。这次统计sql中,关于怎么把生日转化为年龄的sql我确实不会,但是这个很容易百度到,我当时查的是Y橡树Y的文章,其中一篇讲述了5种将生日转化成年龄的sql,我选择了第一种,据说当时间大于当前时间会出错,但是我这里不存在这种场景就取用了。而在将查询结果转换成年龄性别了以后,就看上去很眼熟了,就和我们大学时候遇到的题目一样,班级,姓名,年龄,性别,然后进行分组查询统计。

    这次是告诫我自己,有些东西用的少了还不复习确实容易犯一些低级错误,我当时绞尽脑汁想在分组那里做文章,而忘记了sum函数中可以这么干。

  • 相关阅读:
    Git 生成 && 配置SSH key,配置多个SSH key
    Java异常处理机制:try...catch...的执行流程
    安防相机中的WDR技术
    静态库和动态库的编译链接和使用
    堆栈溢出检测机制
    使用vscode发布
    栈空间分配和栈对齐访问
    linux 查找文件夹下所有指定文件并重命名
    gdb使用小技巧-保存调试点现场
    mount共享文件夹出错,提示操作正在进行
  • 原文地址:https://www.cnblogs.com/lilh/p/8257254.html
Copyright © 2011-2022 走看看