【问题标题】:SUM column and GROUP BY date MySQL (MariaDB)SUM 列和 GROUP BY 日期 MySQL (MariaDB)
【发布时间】:2013-05-28 19:38:56
【问题描述】:

这是我的数据库的一个例子(巨大的数据库,一个表)。我正在使用 MariaDB。

日期 |尺码 |文件 2013-01-06 | 1600 | 30 2013-01-06 | 3200 | 14 2013-02-14 | 1600 | 3 2013-02-14 | 800 | 4 2013-05-19 | 6400 | 300 2013-05-19 | 9000000 | 15000

我正在尝试按日期对 SIZE 列和 FILES 列求和。例如,对于 2013-01-06,大小为 4800,文件为 44,依此类推。我试过的查询是

SELECT DATE, SUM(SIZE) AS BYTES, SUM(FILES) AS FILES
FROM DB.DBSA
WHERE (DATE BETWEEN '2013-01-06' AND '2013-05-19');

...但它只给出总数。

【问题讨论】:

  • 尝试在查询末尾添加GROUP BY DATE

标签: mysql mariadb


【解决方案1】:

查询引擎将此查询识别为聚合查询:

SELECT DATE, SUM(SIZE) AS BYTES, SUM(FILES) AS FILES
FROM DB.DBSA
WHERE (DATE BETWEEN '2013-01-06' AND '2013-05-19');

但是,没有group by 子句,所以聚合接管了所有数据(当然要经过where 子句中的过滤)。

在大多数数据库中,这会导致错误,例如“Date 未被识别为组变量”。 MySQL 选择任意日期值(默认情况下,您可以设置一个参数使其生成错误,就像在标准 SQL 中一样)。

您需要按以下方式分组:

SELECT DATE, SUM(SIZE) AS BYTES, SUM(FILES) AS FILES
FROM DB.DBSA
WHERE (DATE BETWEEN '2013-01-06' AND '2013-05-19')
group by date;

作为另一条评论。列名date 是一个错误的名称,因为它与函数名和内置数据类型冲突。尽量使您的名称与事物的内置 SQL 名称不同。

【讨论】:

  • 成功了!没想到这么简单! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多