这是我的数据库的一个例子(庞大的数据库,一个表)。我正在使用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');
......但它只给出了总数。
答案 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名称不同。