mysql avg() не работает должным образом

У меня сейчас проблемы с MySql. У меня есть запрос, который отлично работает, я использую его некоторое время, но сегодня я застрял с этим.

Запрос:

select avg(valor), tipo_id, users_id, datetime from entries where users_id = '1' and tipo_id = 1 and date_format(datetime,"%Y-%m-%d") between "'2010-09-20" and "2010-10-20" and date_format(datetime,"%h:%i") between "11:59" and "18:59" and excluded= 'n'

Запрос возвращает среднее значение для поля доблести, это нормально. Но когда я изменяю значение users_id на 635, я не могу получить значение avg(). У меня есть некоторые данные с этим user_id, и они подходят для диапазона даты и времени.

Я действительно не знаю, что может быть не так с моим запросом, и с почти 700 пользователями я впервые вижу, как это происходит.


person apocalypse    schedule 21.10.2010    source источник
comment
Проверьте значения NULL в столбце доблести, которые могут привести к ошибке в расчете.   -  person Mark Baker    schedule 21.10.2010
comment
В столбце доблести нет значений NULL, а не с этим user_id, связанным с   -  person apocalypse    schedule 21.10.2010


Ответы (2)


Запустите его без части avg(valor), посмотрите, каковы результаты, возможно, некоторые данные о доблести являются проблемой. Может быть, у вас есть строка или что-то еще. И что именно вы получите в ответ? Любая ошибка?

person Yasen Zhelev    schedule 21.10.2010
comment
Я не получаю ошибки, если я запускаю без avg, я тоже не получаю результата, если я меняю user_id, все в порядке. Каждый user_id, который я пытаюсь вернуть, возвращает мне что-то, и у всех есть некоторые данные, как и у проблемного user_id. - person apocalypse; 21.10.2010
comment
Если вы не получаете данных для этого пользователя, проблема заключается в данных таблицы, а не в запросе. Вы уверены, что у вас есть данные для user_id = 635 в вашей таблице. Проверьте это с помощью какого-нибудь инструмента DBA, такого как phpMyAdmin. - person Yasen Zhelev; 21.10.2010
comment
Да, у меня есть данные, я использую сиквел про, чтобы изучить их и выполнить запросы. - person apocalypse; 21.10.2010
comment
И когда вы запускаете, выберите типо_ид, пользователи_ид, дату и время из записей, где пользователи_ид = «635» и типо_ид = 1 и date_format (дата-время,% Г-% м-% д) между «2010-09-20 и 2010-10-20 и date_format(datetime,%h:%i) между 11:59 и 18:59 и exclude= 'n' вы ничего не получаете, верно? Как насчет данных в остальных столбцах для этого пользователя, возможно, исключено значение «y» или что-то в этом роде. Еще раз все проверьте. - person Yasen Zhelev; 21.10.2010
comment
Я пробовал некоторые запросы с меньшим количеством параметров, когда я запускаю без промежутка в течение нескольких часов, запрос работает. Но странно то, что я изменил значения в datetime на «2010-10-19 14:15:00» (без кавычек), поэтому все записи имеют это значение в столбце datetime. Используя dateformat(datetime, %h:$i) между 00:00 и 12:59, я получаю значения, но если временная часть значения datetime равна 14:15:00, как это могло произойти? - person apocalypse; 21.10.2010
comment
Используйте dateformat(datetime, %H:$i) верхний 'h' и попробуйте с часом больше 12, например 14:15:00, это проблема. ‹dev.mysql.com /doc/refman/5.1/ru/› для получения дополнительной информации - person Yasen Zhelev; 21.10.2010
comment
Просто как тот! Большое спасибо Ясен! :D - person apocalypse; 21.10.2010

Попробуйте добавить GROUP BY users_id

select avg(valor), tipo_id, users_id, datetime from entries
where
    users_id = '1'
    and
    tipo_id = 1
    and
    date_format(datetime,"%Y-%m-%d") between "'2010-09-20" and "2010-10-20"
    and
    date_format(datetime,"%h:%i") between "11:59" and "18:59"
    and
    excluded= 'n'
GROUP BY users_id
person Mads Lee Jensen    schedule 21.10.2010
comment
ему не нужна GROUP BY в этом случае. Он группирует по всем результатам, если я правильно понимаю. - person Yasen Zhelev; 21.10.2010
comment
Да, группировка - это не то, что мне нужно. Я не получаю никакого результата, и это то, что мне нужно решить. - person apocalypse; 21.10.2010