【问题标题】:how to get the user in a different age groups in mysql如何在mysql中获取不同年龄段的用户
【发布时间】:2018-03-09 06:58:25
【问题描述】:

我有一个表 tb_user,其中的记录如下:

Name      gender   location  grewup     date of birth

Arun       male     india    britain    1998-02-03
sonia     female     USA     dubai      1994-02-03
sheetal   female    india    Russia     1993-02-03

我想要的是以下方式的记录:

Age Bracket     Total Count     Female     Male
18-25               50            22        28
26-30               30            12        18
31-36               20            10        10
37-42               10            3          7
43-48               5             2          3

我将查询用作:

select COUNT(id) as total count sum(IF(`sex` = 'Female',1,0)) as female,sum(IF(`sex` = 'Male',1,0)) as male as male FROM tb_user_info GROUP BY `date of birth`

但我无法像我提到的那样获得年龄段

【问题讨论】:

  • Age Brackets 中没有正确的顺序,所以要么我们必须对其进行硬编码,要么有相同的年龄范围,如 5 岁或 7 岁,任何你想要的..
  • @DeepakSharma 我们可以选择合适的年龄段,例如 18-23、24-29,如果可以给出答案的话

标签: mysql activerecord


【解决方案1】:

试试这个:

SELECT A.`Age Bracket`, COUNT(*) `Total Count`, SUM(IF(A.gender='female',1,0)) Female, SUM(IF(A.gender='male',1,0)) Male
FROM
(SELECT
  CASE WHEN floor(datediff(curdate(),birth_date) / 365) BETWEEN 18 AND 25 THEN '18-25'
       WHEN floor(datediff(curdate(),birth_date) / 365) BETWEEN 26 AND 30 THEN '26-30'
       WHEN floor(datediff(curdate(),birth_date) / 365) BETWEEN 31 AND 36 THEN '31-36'
       WHEN floor(datediff(curdate(),birth_date) / 365) BETWEEN 37 AND 42 THEN '37-42'
       ELSE '43-48'
  END `Age Bracket`, gender
FROM tb_user
WHERE floor(datediff(curdate(),birth_date) / 365) BETWEEN 18 AND 48) A
GROUP BY A.`Age Bracket`
ORDER BY A.`Age Bracket`;

有用的链接:

Get difference in years between two dates in MySQL as an integer

MySQL CASE Expression

MySQL IF Function

MySQL GROUP BY

MySQL ORDER BY: Sort a Result Set

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多