MySQL 5.1上没有泄漏SQL的GROUP BY日期[重复]

Posted

技术标签:

【中文标题】MySQL 5.1上没有泄漏SQL的GROUP BY日期[重复]【英文标题】:GROUP BY date with no leaks SQL on MySQL 5.1 [duplicate] 【发布时间】:2011-09-07 14:57:25 【问题描述】:

可能重复:What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?

创建表:

CREATE TABLE `trb3` (
  `value` varchar(50) default NULL,
  `date` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 


SELECT date, SUM(value) AS value FROM trb3 GROUP BY date ORDER BY date DESC

但是

  Jun 30 2011,100
  Jun 29 2011,90
      .
      .
  Jun 10 2011,90
  Jun 02 2011,89
  Jun 01 2011,10

为什么没有显示 Jun 03 的数据?

如何解决这个问题。

【问题讨论】:

您有 6 月 3 日的数据吗?否则,6 月 3 日将不会出现在结果中 - 只会出现实际数据 不,我没有 Jun 03 的数据,但我想获得“0”数据 【参考方案1】:

你需要得到一个你想要的日期列表,然后加入它:

create table my_dates (my_date date not NULL);

然后用您想要数据的日期填充 my_dates:

insert into my_dates values ('2011-06-01'), ('2011-06-02'), ...;

然后

select my_dates.date, SUM(value)
from my_dates left join trb3 on trb3.date = my_dates.my_date
group by 1;

编辑: 仅供参考,这不是临时表,而是永久表。

【讨论】:

非常感谢。但我不想创建表。我可以不用临时表解决吗? @freddiefujiwara:如果你不想用临时表解决这个问题,那就用持久表来解决。在许多不同的情况下,数字表可能会派上用场。您可以创建一个并在此特定问题中使用它来创建与您的条件匹配的范围内的连续日期列表。 是的,还有其他方法可以解决这个问题——只是碰巧这是正确的

以上是关于MySQL 5.1上没有泄漏SQL的GROUP BY日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql优化 之 group by索引松散扫描和紧凑扫描

Apache/MySQL 上的 Django 内存泄漏

如何在 Jboss AS 5.1 中追踪非堆 JVM 内存泄漏?

sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

怎么使用group by?

同样的sql在mysql运行没有问题,在oracle会报不是group by表达式的错