首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP和MYSQL实现年龄组统计

使用PHP和MYSQL实现年龄组统计
EN

Stack Overflow用户
提问于 2013-04-19 18:19:24
回答 4查看 1.2K关注 0票数 4

我想在我的网站上显示用户统计数据,返回年龄组的百分比,如下所示:

代码语言:javascript
复制
-13 years : $percent %
13-15 years : $percent %
15-20 years : $percent %
23+ : $percent %

在我的mysql表中,有一列birth_date返回datatime (yyyy-mm-dd)。

你有这样做的提示或想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-19 18:56:09

纯SQL:

代码语言:javascript
复制
SELECT
    `group`,
    COUNT(*) as `count`
FROM
`user`
INNER JOIN (
    SELECT 
        0 as `start`, 12 as `end`, '0-12' as `group`
    UNION ALL 
    SELECT
        13, 14, '13-14'
    UNION ALL
    SELECT
        15, 19, '15-19'
    UNION ALL
    SELECT
        20, 150, '20+'
) `sub`
    ON TIMESTAMPDIFF(YEAR, `birth_date`, NOW()) BETWEEN `start` AND `end`
GROUP BY `group` WITH ROLLUP;

其他任何事情都可以通过PHP进行计算。

票数 4
EN

Stack Overflow用户

发布于 2013-04-19 18:24:42

代码语言:javascript
复制
select case when year(curdate() - birth_date) < 13 
            then '< 13 years'
            when year(curdate() - birth_date) between 13 and 14 
            then '13 - 14 years'
            when year(curdate() - birth_date) between 15 and 20 
            then '15 - 20 years'
            when year(curdate() - birth_date) >= 23 
            then '+23 years'
         end as `description`,
       (select count(*) from your_table) / count(*) 
from your_table
group by case when year(curdate() - birth_date) < 13 then 1
              when year(curdate() - birth_date) between 13 and 14 then 2
              when year(curdate() - birth_date) between 15 and 20 then 3
              when year(curdate() - birth_date) >= 23 then 4
         end
票数 4
EN

Stack Overflow用户

发布于 2013-04-19 18:23:21

如果您想要纯sql:

代码语言:javascript
复制
SELECT COUNT(*)    
FROM [table_name]
WHERE birth_date < DATE_ADD(NOW(),INTERVAL 13 YEAR)


WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 13 YEAR)
AND birth_date < DATE_ADD(NOW(),INTERVAL 15 YEAR)

--etc

否则,我会建议使用php来创建日期。

您可以将所有查询合并在一起,并创建sql视图,例如:

代码语言:javascript
复制
CREATE VIEW statistics AS
SELECT "0-13" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date < DATE_ADD(NOW(),INTERVAL 13 YEAR)
UNION
SELECT "13-15" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 13 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 15 YEAR)
UNION
SELECT "15-20" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 15 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 20 YEAR)
UNION
SELECT "20-23" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 20 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 23 YEAR)
UNION
SELECT "23+" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 23 YEAR)

然后你可以直接查询:

代码语言:javascript
复制
SELECT * from statistics
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16102387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档