mysql - SUM 列和 GROUP BY 日期 MySQL (MariaDB)

标签 mysql mariadb

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

DATE        |   SIZE        |   FILES
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,依此类推。我尝试过的查询是

选择日期、SUM(SIZE) AS BYTES、SUM(FILES) AS FILES
来自 DB.DBSA
地点(“2013-01-06”和“2013-05-19”之间的日期);

...但它只给出了总计。

最佳答案

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

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 子句中的过滤)。

在大多数数据库中,这会导致错误,例如“日期未识别为组变量”。 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 名称不同。

关于mysql - SUM 列和 GROUP BY 日期 MySQL (MariaDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800082/

相关文章:

mysql - 当远程服务器中同时存在 mysql 和 mariadb 时如何连接到 mariadb

php - 如果mysql db 表不包含具有特定ID 的行,则将数据添加到表中

php - 如何将查询结果提供给 CodeIgniter 中的 where 条件?

mysql - 获取按在另一个表中出现的次数排序的列表

mysql - 环回 : how do I make sure that values are sent to the local db, 不是远程数据库?

php - 在 PHP 中锁定 MySQL INNODB 行

mysql - MariaDB 客户端默认使用 UTF-8

mysql - 我们可以在mysql查询中添加变量名吗?

MYSQL - 最近 10 天的 SUM 值

mysql - Rails activerecord 查询在 sqlite 中工作,而不是在 MySql 中工作