2015-07-20 11 views
0

Я хочу написать запрос для суммарной суммы в MYSQL. У меня есть внешний ключ в моем столе, и я хочу добавить их часы как совокупную сумму.Совокупный запрос суммы по внешнему ключу

Таблица 1

id(not primary key) Hours 
1      4 
2      4 
1      5 

Я попробовал этот запрос,

select spent_hours := spent_hours + hours as spent 
from time 
join (select spent_hours := 0) s 

Я получаю эту

id(not primary key) hours spent 
1      4  4 
2      4  8 
1      5  13 

Но я хочу этот результат:

id(not primary key) Hours spent 
1      4 4 
2      4 4 
1      5 9 
+0

Хорошо, что вы пробовали –

+0

выберите spent_hours:..? = spent_hours + часов, как затраченные время от Join (выберите spent_hours: = 0) s – Jerry

+0

Пожалуйста, добавьте свой запрос (используя [edit]) на свой вопрос. –

ответ

1

Поскольку у вас есть поле автоинкрементного (давайте предположим, что в этом случае его называют record_id), вы можете использовать эту маленькую хитрость, чтобы добиться того, чего вы хотите:

SELECT Main.id, Main.spentHours, 
(
    SELECT SUM(spentHours) 
    FROM Table1 WHERE Table1.id = Main.id 
    AND Table1.record_id >= Main.record_id 
) as totalSpentHours 
FROM Table1 Main 
ORDER BY Main.record_id ASC 

Это будет получать идентификатор, текущие отработанные часы, а также с использованием подзаголовок, все часы от текущего идентификатора и выше для этого пользователя.

+0

Исходя из ожидаемого результата, OP хочет ** работать с итогом **. –

0

Вам необходимы дополнительные переменный для отслеживания совокупной суммы в пределах каждого ID:

select t.id, t.hours, 
     (@h := if(@i = id, @h + spent_hours, 
       if(@i := id, spent_hours, spent_hours) 
       ) 
     ) as spent 
from time cross join 
    (select @h := 0, @i := 0) params 
order by id, ??; 

Примечания: Вам нужно дополнительный столбец, чтобы указать порядок кумулятивных сумм (обозначенных ?? в пункте order by . Помните, что таблицы SQL представляют неупорядоченные наборов, так что вам нужен столбец явно представляют собой упорядоченность

+0

Я не уверен, что он «нужен» (переменная, а не ключ), но это отличное решение. – Strawberry

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