具有内部联接的sql求和和和计数函数

具有内部联接的sql求和和和计数函数,sql,count,sum,Sql,Count,Sum,返回102行 select * from Table1 t1 inner join Table2 t2 on t1.id=t2.tid 返回29000103 这意味着第二个查询无法正常工作。问题出在哪里?看起来您的103个值中有一个在val列中为null select sum(t1.val), count(t1.val) from Table1 t1 inner join Table2 t2 on t1.id=t2.tid 这应该返回103进行计数。至少在MS SQL Server中。但

返回102行

select * 
from Table1 t1
inner join Table2 t2 on t1.id=t2.tid
返回29000103


这意味着第二个查询无法正常工作。问题出在哪里?

看起来您的103个值中有一个在val列中为null

select sum(t1.val), count(t1.val) 
from Table1 t1
inner join Table2 t2 on t1.id=t2.tid

这应该返回103进行计数。至少在MS SQL Server中。但我认为它是SQL ANSI的一部分,因此应该适用于所有符合SQL ANSI的数据库引擎

因为您没有指定DBMS,我的回答仅基于您标记的
SQL
。无论如何,这应该适用于任何DBMS

您有两个具有相同联接的不同查询。在这两种情况下,联接将生成相同数量的结果。从第一个结果可以清楚地看出,联接后有102个结果

若你们想数一数那个些行,并没有办法得到比实际更多的行。可能发生的情况是,由于
count(field)
聚合函数将只对
field
的非空值进行计数,因此得到的值会更少


但是,您表示您得到了更多,这是绝对不可能的。

您能在上复制这个吗?我们需要SQLFIDLE//表脚本。这似乎是不可能的。使用同一连接无法获得更多值。你必须有一个输入错误或结果混淆,或者你没有粘贴实际的查询。我不能在sql FIDLE中复制。看到了吗:但是如果103中的1是空的,那么第二个查询应该返回102,对吗?@KirillPolishchuk你比我严厉一点:POh。我看了看那些结果,它们没有任何意义。。在count(t1.val)中只能得到较少的结果,而不能得到更多的结果。。哥们,也许有人在这些请求之间插入了更多的值。)@KirillPolishchuk我的描述是正确的,这个问题有点奇怪不幸的是,我不能给出真正的查询和答案,但这是真的。我已经检查了所有的变种。唯一的原因可能是我们在发送查询执行之前使用了特殊的sql解析器
select sum(t1.val), count(*) 
from Table1 t1
inner join Table2 t2 on t1.id=t2.tid