2012-05-17 2 views
1

У меня есть следующий запрос 2, но они возвращают другой результат. Например, если я запрашиваю общую сумму с одного терминала, я получаю: 456.Группа Mysql по 15min не соответствует общей сумме

Если я спрашиваю его через 15 минут, подсчитайте все значения, я получаю 474 ... Как это возможно?

Мой запрос для извлечения общей суммы следующих

SELECT SUM(logs.amount) * ei_relationships.itemprice as income 
    ,  currency 
FROM  ei_relationships 
    RIGHT OUTER JOIN logs ON ei_relationships.id = logs.ei_relationship_id 
WHERE ei_relationships.event_id = 1 
    AND logs.serial = '5B:13:52:28:71:21:ED:F1' 
ORDER BY currency, log_time ASC 

Это мой запрос, чтобы получить те же данные, но теперь разделить его на 15мин

SELECT SUM(logs.amount) * ei_relationships.itemprice as income 
    ,  UNIX_TIMESTAMP(log_time) - UNIX_TIMESTAMP(log_time)%(900) as hour 
    ,  currency 
FROM  ei_relationships 
    RIGHT OUTER JOIN logs ON ei_relationships.id = logs.ei_relationship_id 
WHERE ei_relationships.event_id = 1 
    AND logs.serial = '5B:13:52:28:71:21:ED:F1' 
GROUP BY hour 
ORDER BY currency, log_time ASC 

ответ

0

Как the manual говорит:

Если вы используете групповую функцию в инструкции, не содержащей предложения GROUP BY, она эквивалентна группе для всех строк.

Он also говорит:

MySQL расширяет использование GROUP BY так, чтобы выбрать список может относиться к неагломерированным столбцам не указанным в пункте GROUP BY. Это означает, что предыдущий запрос является законным в MySQL. Вы можете использовать эту функцию для повышения производительности, избегая ненужной сортировки и группировки столбцов. Однако это полезно прежде всего, когда все значения в каждом неагрегированном столбце, не названном в GROUP BY, одинаковы для каждой группы. Сервер может выбирать любое значение из каждой группы, поэтому, если они не совпадают, выбранные значения являются неопределенными.

Таким образом, в обоих запросах, сумма amount столбца умножается на одно из значений из itemprice колонны; какое из этих значений MySQL будет использовать, является неопределенным, и поэтому, если каждая запись не имеет того же itemprice, то итоговый income также неопределен.

Возможно, вы намеревались написать GROUP BY currency и выбрать SUM(logs.amount * ei_relationships.itemprice) AS income?

Смежные вопросы