Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么结果取决于having子句_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql 为什么结果取决于having子句

Sql 为什么结果取决于having子句,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我不明白为什么空表clients中的结果如下: SELECT SUM(clients.age), COUNT(*) FROM clients 返回 null,0 但是当我加上这个条款的时候 GROUP BY clients.age 它返回空的 我无法理解groupby对结果的影响方式,因为我知道groupby在SELECT之前执行groupby的查询请求一个结果集,其中包含每个不同客户端的一行。age。由于没有任何clients.age值,因此返回0行。如果不使用groupby,查询将请求一

我不明白为什么空表
clients
中的结果如下:

SELECT SUM(clients.age), COUNT(*)
FROM clients
返回

null
0

但是当我加上这个条款的时候

GROUP BY clients.age
它返回空的


我无法理解
groupby
对结果的影响方式,因为我知道
groupby
SELECT
之前执行
groupby
的查询请求一个结果集,其中包含每个不同
客户端的一行。age
。由于没有任何
clients.age
值,因此返回0行。如果不使用
groupby
,查询将请求一行,其中包含整个表的聚合。由于只请求了一个摘要行,因此不管表是否为空,都会返回该行。

您试图用代码实现什么,我似乎无法理解。什么都没有。。。我只是想了解RDBM的行为。通常没有理由将其分组,而不将其包含在SELECT中。例如,在选择中,将
SUM(clients.age)
更改为
clients.age
,结果可能会更清晰。不要假设事情是按什么顺序进行的。查询计划器决定了这一点。在一种情况下,连接可能首先发生。在另一种情况下,可能在联接之前发生。你所能说的就是
SELECT
总是最后一个。