問題描述
為什么需要在 HAVING
之后而不是 WHERE
中放置自己創建的列(例如 select 1 as "number"
)MySQL?
Why do you need to place columns you create yourself (for example select 1 as "number"
) after HAVING
and not WHERE
in MySQL?
與執行 WHERE 1
(編寫整個定義而不是列名)相比,是否有任何缺點?
And are there any downsides instead of doing WHERE 1
(writing the whole definition instead of a column name)?
推薦答案
為什么需要在 HAVING 之后放置自己創建的列(例如選擇 1 作為數字")而不是在 MySQL 中的 WHERE 中?
Why is it that you need to place columns you create yourself (for example "select 1 as number") after HAVING and not WHERE in MySQL?
WHERE
在 GROUP BY
之前應用,HAVING
在之后應用(并且可以過濾聚合).
WHERE
is applied before GROUP BY
, HAVING
is applied after (and can filter on aggregates).
通常,您不能在這兩個子句中引用別名,但是 MySQL
允許在 GROUP BY
、 中引用
和 SELECT
級別的別名>ORDER BYHAVING
.
In general, you can reference aliases in neither of these clauses, but MySQL
allows referencing SELECT
level aliases in GROUP BY
, ORDER BY
and HAVING
.
與執行WHERE 1"(編寫整個定義而不是列名)相比,是否有任何缺點
And are there any downsides instead of doing "WHERE 1" (writing the whole definition instead of a column name)
如果您的計算表達式不包含任何聚合,則將其放入 WHERE
子句中很可能會更有效.
If your calculated expression does not contain any aggregates, putting it into the WHERE
clause will most probably be more efficient.
這篇關于哪里 vs 有的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!