WHERE vs HAVING(哪里 vs 有)
问题描述
为什么需要在 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 有的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:哪里 vs 有


基础教程推荐
- 什么是 orradiag_<user>文件夹? 2022-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 在多列上分布任意行 2021-01-01
- oracle区分大小写的原因? 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01