首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示MySQL数据库中每月的记录数(包括零)?

如何显示MySQL数据库中每月的记录数(包括零)?
EN

Stack Overflow用户
提问于 2012-11-15 01:10:16
回答 3查看 358关注 0票数 0

根据以下评论修订了24/11/2012。

我有一个成员的MySQL数据库(v5.0.95),其中列出了他们加入的时间

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `members` (
  `id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL,
  `joined` datetime NOT NULL,
  KEY `id` (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我还有第二个表,它将包含指示哪个YYYY-MM的记录

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `blocker` (
    `group_id` int(11) NOT NULL,
    `YYYYMM` char(7) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

理想情况下,下面的连接将提供以下内容

代码语言:javascript
复制
  SELECT date_format( m.joined, '%Y-%m' ) AS DateJoined, count( * ) AS NumJoined 
  FROM members AS m
  LEFT OUTER JOIN blocker AS b
  ON b.YYYYMM = date_format( m.joined, '%Y-%m')
  WHERE m.group_id =1637017 AND b.group_id =1637017
  GROUP BY DateJoined
  ORDER BY DateJoined ASC

会给我这个

代码语言:javascript
复制
DateJoined  NumJoined 
2012-01     0
2012-02     0
2012-03     0
2012-04     17
2012-05     0
2012-06     12
2012-07     10
2012-08     10
2012-09     11
2012-10     14
2012-11     4

不幸的是,它没有提供零结果月份,并给了我这个

代码语言:javascript
复制
DateJoined  NumJoined 
2012-04     17
2012-06     12
2012-07     10
2012-08     10
2012-09     11
2012-10     14
2012-11     4

如有任何建议,我们将不胜感激。我是不是很接近...?

EN

回答 3

Stack Overflow用户

发布于 2012-11-15 01:12:08

sql数据库无法为您生成不存在的数据。如果没有人加入某个特定的月份,你就不能让它无中生有地创造出那个月。

如果你想强制它,你必须有一个临时表,每个月在你想要的范围内列出,然后你可以连接到这个临时表,并获得您的0计数。

票数 3
EN

Stack Overflow用户

发布于 2012-11-15 01:14:03

您可以创建一个年/月表,并对成员表使用左连接。

票数 0
EN

Stack Overflow用户

发布于 2012-11-15 15:19:29

创建另一个表(可以命名为dateCalender),用于存储每个月的值,如下所示:

代码语言:javascript
复制
2012-01
2012-02
2012-03
2012-04
2012-05
2012-06
2012-07
2012-08
2012-09
2012-10
2012-11

现在使用这个新表与原始表的左外部连接来检索结果,对于有有效值的月份将返回值,对于没有任何值的月份将返回Null (可以表示为0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13383696

复制
相关文章

相似问题

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