ГДЕ по сравнению с НАЛИЧИЕМ

Почему необходимо поместить столбцы, которые Вы создаете сами (например, select 1 as "number") после HAVING и нет WHERE в MySQL?

И есть ли любые оборотные стороны вместо выполнения WHERE 1 (запись целого определения вместо имени столбца)?

241
задан bluish 9 February 2012 в 03:50
поделиться

3 ответа

Почему в MySQL нужно помещать столбцы, которые вы создаете сами (например, "select 1 as number") после HAVING, а не WHERE?

WHERE применяется перед GROUP BY, HAVING применяется после (и может фильтровать по агрегатам).

Вообще, вы можете ссылаться на псевдонимы ни в одном из этих пунктов, но MySQL позволяет ссылаться на псевдонимы уровня SELECT в GROUP BY, ORDER BY и HAVING.

И есть ли какие-нибудь минусы вместо того, чтобы делать "WHERE 1" (писать все определение вместо имени столбца)

Если ваше вычисляемое выражение не содержит агрегатов, то поместить его в предложение WHERE, скорее всего, будет более эффективно.

315
ответ дан 23 November 2019 в 03:14
поделиться

HAVING используется для фильтрации агрегатов в вашей GROUP BY .

Например, чтобы проверить повторяющиеся имена:

SELECT Name FROM Usernames
GROUP BY Name
HAVING COUNT(*) > 1
39
ответ дан 23 November 2019 в 03:14
поделиться

Основное отличие состоит в том, что WHERE нельзя использовать для сгруппированного элемента (например, SUM (число) ), тогда как HAVING может.

Причина в том, что ГДЕ выполняется до группировки и HAVING выполняется после группировки.

61
ответ дан 23 November 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: