如果我在select
子句中创建别名,则不能在where
子句中使用它,因为根据sql查询的执行顺序位于where
前面select
。
但是我可以在select
子句中创建别名,并在子句中使用它,having
尽管having
它早于select
。
为什么会这样呢?
前任:
select type, (case when number>25 then 1 else 0 end) inc
from animals
where inc='1';
这不会工作。但,
select type, (case when number>25 then 1 else 0 end) inc
from animals
having inc='1';
这行得通。为什么这样?
基本上是因为它们是出于不同目的而定义的。该WHERE
子句用于记录过滤,该HAVING
子句设计用于通过 聚合函数 (GROUP BY
)进行过滤。在第二个查询中,GROUP BY
正在使用隐式过滤,因此,例如,如果将另一列添加到SELECT
子句中,最终将得到不同的结果。
编辑 基于马丁·史密斯(Martin Smith)的更正
HAVING
创建允许过滤产生的行GROUP BY
。如果未GROUP BY
指定no ,则将整个结果视为一个组。
如果既未指定a
<where clause>
也未<group by clause>
指定a,则令T为前一个的结果<from clause>
或者
…如果未
<group by clause>
指定,则该组为整个表格
编辑2 现在关于ALIAS:
有关搜索条件中列引用的WHERE子句的规范说:
<column reference>
直接包含在中的每个<search condition>
应明确引用T 列 或作为外部引用。
请参阅:7.6<where clause>
,语法规则1。
有关搜索条件中列引用的HAVING子句的规范说:
<column reference>
直接包含在中的 每个<search condition>
应明确引用T 的分组列 或作为外部引用。
请参阅:7.8<having clause>
,语法规则1。
和 分组列 被定义为:
在a中引用的列
<group by clause>
是分组列。
因此,总而言之,WHERE
必须引用表的一列,而HAVING
子句必须引用行组的分组列。
(第二次非正式审核草案)ISO / IEC 9075:1992,数据库语言SQL-
1992年7月30日
C# 最吸引人的地方是它与 Java 的区别而不是它们之间的相似性。下面就来介绍一下 C# 与 Java 之间的区别: 序号 Java C# 1 Java 是 Oracle 开发的一种高级、健壮、安全和面向对象的编程语言 C# 是微软开发的在 .Net Framework 上运行的一种面向对象的编程语言 2 Java 语言需要在 Java 运行环境(JRE)下运行 C# 语言需要在公共语言运行库
本文向大家介绍Where 与 Having之间的区别,包括了Where 与 Having之间的区别的使用技巧和注意事项,需要的朋友参考一下 SQL查询中使用的两个关键字“ Where”和“ Having”都是用于根据给定条件过滤和汇总从数据库中检索到的数据。 根据两个关键字的特征,我们可以区分Where和Have,如下所示: 序号 键 where having 1 定义 SQL查询中的WHERE子
Mockito框架中的和有什么区别?
我正在尝试添加菜单在我的应用程序中,我发现,当它工作时,如果它扩展AppCompattivity,但不是如果它扩展Activity。是菜单中没有任何活动可用的东西吗?人们说Activity是基本的,而appcompatition是后来发展起来的东西,有什么好的理由我应该使用Activity而不是appcompatition吗?由于AppCompattivity是默认的,但在我的学习中,建议选择Ac
我现在学硒,遇到了一个问题。 我知道Selenium默认支持旧的Firefox版本,没有驱动程序。对于Firefox的最新版本,我们必须下载驱动程序并使用定义它。 根据此链接,对于Firefox45和46,启动驱动程序代码可能如下所示: 此外,我还看到过这样的代码: 我的第二个问题是和或者和之间有什么区别?