SUM列和GROUP BY日期MySQL(MariaDB)

时间:2013-05-28 19:38:57

标签: 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

我想在DATE之前将SIZE列和FILES列相加。例如,对于2013-01-06,大小为4800,FILES为44,依此类推。我尝试过的查询是

SELECT DATE, SUM(SIZE) AS BYTES, SUM(FILES) AS FILES
FROM DB.DBSA
WHERE (DATE BETWEEN '2013-01-06' AND '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');

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

1 个答案:

答案 0 :(得分: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名称不同。