-1
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

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

4

2 回答 2

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 的数据库引擎

于 2013-10-18T04:08:19.060 回答
0

由于您尚未指定 DBMS,因此我将根据SQL您的标签来回答。无论如何,这应该适用于任何 DBMS。

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

然后,如果您想计算这些行数,那么您将无法获得比实际更多的行数。可能发生的情况是你得到的更少,因为count(field)聚合函数只会计算field.

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

于 2013-10-18T04:22:45.727 回答