我必须用错误的方式搜索,或者我有一个愚蠢的时刻.
声明HAVING和声明之间的区别WHERE是SQL SELECT什么?
编辑:我已经将史蒂文的答案标记为正确答案,因为它包含链接上的关键信息:
何时
GROUP BY不使用,HAVING表现得像一个WHERE条款
我见过的WHERE情况没有GROUP BY,也是我的困惑开始的地方.当然,在您知道这一点之前,您无法在问题中指定它.
非常感谢所有非常有启发性的答案.
运行MonetDB数据库服务器工具包v1.1(2013年2月-SP6)
这个查询
select rowtype, min(zdate), max(zdate) , count(*)
from fdhista
group by rowtype
;
Run Code Online (Sandbox Code Playgroud)
返回每个行类型的正确最小和最大日期.
rowtype L1 L2 L3
3 1970-12-31 2009-07-31 1664186
1 2003-02-24 2013-09-13 11649306
Run Code Online (Sandbox Code Playgroud)
这个查询,在同一个表上
select min(zdate), max(zdate), count(*) from fdhista where rowtype=3;
Run Code Online (Sandbox Code Playgroud)
似乎"忽略"了where子句,返回
L1 L2 L3
1970-12-31 2013-09-13 13313492
Run Code Online (Sandbox Code Playgroud)
我还没有找到一个通用的sql先例(尚未).这是预期的反应吗?
我在期待这个
L1 L2 L3
1970-12-31 2009-07-31 1664186
Run Code Online (Sandbox Code Playgroud)
我在Oracle和SQL Server中尝试了类似的查询,并取回了我预期的响应.然而,我发现支持"忽略"where子句的通用sql注释.也许这是MonetDB使用特定SQL标准的情况?