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
总是最后一个。