这是我的数据库的一个示例(巨大的数据库,一张表)。我正在使用 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/