0

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

...但它只给出总数。

4

1 回答 1

0

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

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 名称不同。

于 2013-05-28T20:00:39.027 回答