2013-05-28 3 views
0

Это пример моей базы данных (огромная база данных, одна таблица). Я использую MariaDB.SUM column и GROUP BY date 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 

Я пытаюсь суммировать столбцы SIZE и FILES по DATE. Например, для 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'); 

... но это только дает суммарный итог.

+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

Это сработало! Не понял, что это было просто! знак равно –