Неправильно, что вы не можете использовать функции в предложении WHERE
. Вы можете поместить в него почти все (кроме агрегатов), если оно оценивает логическое истинное/ложное условие на основе столбцов задействованных таблиц или просто постоянных выражений. HAVING
, с другой стороны, поддерживает агрегаты в дополнение ко всему остальному.
Разница между ними заключается в том, когда она выполнена, это актуально, если вы используете GROUP BY
. WHERE
, он накладывает условия, по которым строки из всех задействованных таблиц могут использоваться для формирования групп, а те, которые его не выполняют, не будут учитываться для агрегаций. Вы можете думать о WHERE
, работая над необработанными табличными данными, прежде чем группироваться. HAVING
оценивается после того, как группы уже сформированы, а агрегации вычисляются (поэтому вы можете использовать их здесь) и решили, какие конечные группы могут отображаться в конечном результате запроса.
Оба они работают в разное время и на разных наборах данных. Обратите внимание, что при отсутствии GROUP BY
, WHERE
и HAVING
эквивалентны.
, который сказал вам, что вы не должны использовать функции в предложении WHERE? –
Агрегатные функции' (MAX, MIN, AVG) ', безусловно, отличаются от' date functions'. Вы не можете использовать агрегатную функцию в 'where clause'. –
Итак, нам нужно только искать функцию агрегата. Где правильный список для mysql? – user3402584