0

假设我们有 3 个表,第 1 个表是主表,下面是详细信息

MasterTable(Id,col1,col2)

ChildTable1(Id,MasterId,Amount1)

ChildTable2(Id,MasterId,Amount2)

我必须从 mastertable 中找到sum(chiletable1.Amount1)应该大于的 idsum(chiletable2.Amount2)

我已经使用 groupby 和有提供正确数据的子句编写了查询,

如果表中有数十亿条记录,是否有任何其他方法可以在没有 groupby 的情况下编写相同的查询。以下是我的查询

    select Mastertable.Id 
           from Mastertable,Childtable1,ChildTable2
           where Mastertable.Id=Childtable1.MasterId
                 and ChildTable1.MasterId=ChildTable2.MasterId
                 group by MasterTable.Id
                 having SUM(Childtable1.Amount1) > SUM(Childtable2.Amount2)
4

2 回答 2

1

要回答你的问题,

原因很简单:没有 aGROUP BY就没有SUM()s。(可能除了总计)

编辑:好吧,也许是一个带有循环、游标等的存储过程,但这肯定是一种矫枉过正!;))

于 2013-10-09T17:22:48.813 回答
0

好吧,您将不得不在某个时候进行分组,所以我不知道您为什么根本不想分组。

您可以尝试按子表中的 ID 进行分组:

SELECT M.Id
FROM Mastertable M
INNER JOIN (SELECT MasterID, 
                   SUM(Amount) Amount 
            FROM Childtable1 
            GROUP BY MasterID) C1
    ON M.Id = C1.MasterID
INNER JOIN (SELECT MasterID, 
                   SUM(Amount) Amount 
            FROM Childtable2 
            GROUP BY MasterID) C2
    ON M.Id = C2.MasterID
WHERE C1.Amount > C2.Amount

如果子表中有外键MasterTable或索引,MasterID这可能是最快的方法,无需通过快照或其他方法进行预聚合。

于 2013-10-09T17:23:45.380 回答