2013-10-09 2 views
0

Предположим, у нас есть 3 таблицы, первая таблица главная таблица ниже деталисравнение двух агрегатной функции без группы по п

MasterTable (Id, col1, col2)

ChildTable1 (Id, MasterId, количество1)

ChildTable2 (Id, MasterId, количество2)

я должен найти идентификатор из mastertable где sum(chiletable1.Amount1) должен быть больше, чем sum(chiletable2.Amount2)

я написал запрос с использованием GroupBy и имеющий пункт, который ГВСИ правильные данные,

есть ли другой способ, чтобы написать тот же запрос без GroupBy, имея в виду вопрос производительности, если есть billons записей в таблице. следующий мой запрос

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

Я сильно подозреваю, что 'group by' - это самый быстрый способ выполнить запрос. –

+0

Что делать, если конкретный MasterId существует в одном из двух «дочерних таблиц», но не для обоих? – geomagas

ответ

1

Чтобы ответить на ваш вопрос, не.

Причина проста: Без GROUP BY у вас не может быть SUM() s. (За исключением, может быть, общий итог)

(EDIT: Ну, может быть, хранимая процедура с петлями, курсоры и т.п., но , что определенно был бы излишним;))

0

Ну, вам придется сгруппировать по , поэтому я не знаю, почему вы не хотите группировать вообще.

Вы можете попробовать группировку идентификаторов в дочерних таблицах:

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 в дочерних таблицах это, скорее всего, станет быстрый способ без предварительной агрегации с помощью снимков или какого-либо другого метода.

Смежные вопросы