2015-05-19 2 views
0

Я добавляю количество билетов, проданных за спортивное мероприятие, ответ должен быть менее 100, но мой ответ в тысячах.SQL Sum возвращает неверный номер

SELECT Stubhub.Active.Opponent, 
     SUM(Stubhub.Active.Qty) AS AQty, SUM(Stubhub.Sold.Qty) AS SQty 
FROM Stubhub.Active INNER JOIN 
     Stubhub.Sold ON Stubhub.Active.Opponent = Stubhub.Sold.Opponent 
GROUP BY Stubhub.Active.Opponent 
+2

Вы пытались использовать 'COUNT' вместо' SUM'? –

+0

Я сделал, цифры были все еще в тысячах, но не так высоко –

+0

, в этом случае вы делаете что-то не так с вашим соединением. что, если вы получите количество всех записей в Продается без присоединения к Активному? –

ответ

0

Эта проблема возникает, потому что вы получаете декартовую продукцию между каждой таблицей для каждого противника. Решение состоит в том, чтобы предварительно агрегат от противника:

SELECT a.Opponent, a.AQty, s.SQty 
FROM (SELECT a.Opponent, SUM(a.Qty) as AQty 
     FROM Stubhub.Active a 
     GROUP BY a.Opponent 
    ) a INNER JOIN 
    (SELECT s.Opponent, SUM(s.QTY) as SQty 
     FROM Stubhub.Sold s 
     GROUP BY s.Opponent 
    ) s 
    ON a.Opponent = s.Opponent; 

Обратите внимание, что в этом случае вам не нужно агрегацию во внешнем запросе.

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