2015-11-11 3 views
0

У меня есть две таблицыSQL Query Суммирование В Присоединяйтесь

Table_1:

╔══════╦══════════╦═════════╗ 
║ Name ║ Date ║ Revenue ║ 
╠══════╬══════════╬═════════╣ 
║ A ║ 1/1/2001 ║ 20 ║ 
║ A ║ 1/2/2001 ║ 20 ║ 
║ B ║ 1/1/2001 ║ 40 ║ 
╚══════╩══════════╩═════════╝ 

Table_2:

╔══════╦══════╗ 
║ Name ║ Task ║ 
╠══════╬══════╣ 
║ A ║ Call ║ 
║ A ║ Foo ║ 
║ B ║ Bar ║ 
╚══════╩══════╝ 

Так что я объединение

SELECT sum(Revenue), t2.Name, T2.Task 
FROM Table_1 as t1 JOIN Table_2 as t2 ON t1.Name = t2.Name 
GROUP BY t2.Name 

В результате таблица присоединиться выглядит следующим образом:

Result 
Name Sum 
A  80 
B  40 

Проблема заключается в том, что я хочу, чтобы результат суммы будет 40. Как следует изменить мой запрос?

+1

GROUP BY t2.Name – AiApaec

ответ

2

Используйте этот запрос:

SELECT Name, SUM(Revenue) 
FROM Table_1 
GROUP BY Name 

Я не вижу никакого смысла в присоединении к Table_1Table_2, так как вы не используете в Task колонке.

+0

Возможно, он использует его в качестве фильтра, т.е. показывают только строки, которые также существуют в Table_2. –

+0

Также вы должны объяснить * почему * он получил 80 в своем запросе, это хорошая возможность обучения. –

+1

Он получает 80, потому что, когда он присоединяется к имени, он возвращает 4 строки, где Name = A (2 строки из таблицы_1 раз 2 строки из таблицы_2). 4 * 20 = 80 –

2

Корень вашей проблемы состоит в том, что соединение не выполняет то, что вы ожидаете от него. Выполняя соединение между двумя таблицами в «name», вы создаете дубликаты. Удалите предложение group by в вашем запросе, и вы точно увидите, что я имею в виду.

Как уже упоминалось в предыдущем ответе, объединение (в данном случае) является излишним. Я бы посоветовал посмотреть на вещи ближе, чем это. Как можно структурировать данные таким образом, чтобы это дублирование данных не происходило?

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

+0

Забыл добавить задачу в предложение select – Rhs

0

вы должны вычислить сумму до вступления в таблицы, как:

select t1.Name, t1.sum, t2.task from 
    (
     SELECT Name, sum(Revenue) as sum FROM Table_1 group by Name 
    ) as t1 
    JOIN 
    Table_2 as t2 ON t1.Name = t2.Name