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
这意味着第二个查询无法正常工作。什么问题?
看起来您的 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 的数据库引擎
由于您尚未指定 DBMS,因此我将根据SQL
您的标签来回答。无论如何,这应该适用于任何 DBMS。
您有 2 个具有相同联接的不同查询。在这两种情况下,连接将生成相同数量的结果。从第一个可以明显看出join后有102个结果。
然后,如果您想计算这些行数,那么您将无法获得比实际更多的行数。可能发生的情况是你得到的更少,因为count(field)
聚合函数只会计算field
.
但是,您说您得到了更多,这是绝对不可能的。