Mysql 在特定日期之间进行计数和分组
Mysql count and group between specific dates
我的查询有问题。
我有一个 table 这样的:
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 )
...
此致
您需要加入包含所有年份的 table。您可以创建一个包含所有年份的真实 table,或者在子查询中动态构建它:
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
我的查询有问题。
我有一个 table 这样的: 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 )
...
此致
您需要加入包含所有年份的 table。您可以创建一个包含所有年份的真实 table,或者在子查询中动态构建它:
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