带内连接的sql sum和count函数

时间:2013-10-18 04:00:57

标签: sql count sum

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

返回102行

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

返回29000 103

这意味着第二个查询无法正常工作。有什么问题?

2 个答案:

答案 0 :(得分:0)

看起来你的103个值之一在val列中为null。

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

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

答案 1 :(得分:0)

由于您没有指定DBMS,因此您在标记时只会根据SQL进行回答。无论如何,这应该适用于任何DBMS。

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

如果您想要计算这些行,则无法获得比实际行更多的行。可能发生的情况是您得到的更少,因为count(field)聚合函数将仅计算field的非空值。

然而,你说你得到了更多,这是绝对不可能的。