【问题标题】:Mysql count and group between specific dates特定日期之间的Mysql计数和分组
【发布时间】:2015-05-14 16:33:42
【问题描述】:

我的查询有问题。

我有一张这样的桌子: tbl_people

id | startDate  | endDate    | Gender
1  | 2010-03-01 | 2011-04-11 | m
2  | 2010-04-01 | 2010-06-14 | f
3  | 2010-03-01 | 2010-04-11 | m
4  | 2009-09-09 | 2009-10-10 | f

对于数据库中给出的所有年份,我想计算人的性别,即那一年在 startDate 和 endDate 之间的人。当 startDate 为 2010 和 endDate 2011 时,两者都应计算在内。

所以结果应该是这样的:

year | m | f | m+f
2009 | 0 | 1 | 1
2010 | 2 | 1 | 3
2011 | 1 | 0 | 1

我真的不知道如何实现对所有年份列表的查询。 目前我有这个:

select
    sum(case tbl_people.Gender when 'm' then 1 else 0 end),
    sum(case tbl_people.Gender when 'f' then 1 else 0 end),
    count( tbl_people.Gender )
...

最好的问候

【问题讨论】:

    标签: php mysql group-by between


    【解决方案1】:

    您需要加入一个包含所有年份的表。您可以创建一个包含所有年份的真实表,也可以在子查询中动态构建它:

    SELECT y.year, 
            SUM(p.Gender = 'm') AS m,
            SUM(p.Gender = 'f') AS f,
            COUNT(*) AS `m+f`
    FROM (SELECT 2009 AS year
          UNION
          SELECT 2010 AS year
          UNION
          SELECT 2011 AS year) AS y
    LEFT JOIN tbl_people AS p ON y.year BETWEEN YEAR(p.startDate) AND YEAR(p.endDate)
    GROUP BY y.year
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多