2013-05-28 92 views
0

这是我的数据库(巨大的数据库,一个表)的一个例子。我正在使用MariaDB。SUM列和GROUP BY日期MySQL(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 

我想在DATE中求和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'); 

...但它只是给共展宏图。

+0

尝试在查询结尾处添加“GROUP BY DATE” – Fabio

回答

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

+0

工作正常!没有意识到这是简单的事情! =) –