2015-05-08 6 views
-1

У меня есть таблица, где каждый transaction связан с данным price. Что-то вроде этого:Суммировать значения столбца на основе группы значений из другого столбца

transaction price 
    1  10 
    2  20 
    3  30 
    5  50 
    6  10 
    10  10 
    23  10 
    24  10 
    25  10 
    26  10 
    27  10 

Я пытаюсь найти способ суммированию price основанный на конкретной сделке или группе сделок. Результат запроса будет что-то вроде этого:

transaction price 
    1-3  60 
    5-6  60 
    10  10 
23-27  50 

Таким образом, я могу сказать, что для сделок 1 до 3 результатов были 60, и так далее. Можете ли вы указать мне в правильном направлении, чтобы сделать это с помощью MySQL?

+0

вы должны, вероятно, должны были идти самостоятельно, но в любом случае –

ответ

2

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

select if(count(transaction) = 1, transaction, concat(min(transaction), '-', max(transaction))) transactions, sum(price) price 
    from (
    select if(`transaction` = @prev + 1, 
     if(@prev := `transaction`, @rank, @rank), 
      if(@prev := `transaction`, @rank := @rank + 1, @rank := @rank + 1) 
     ) gr, 
     `transaction`, 
     price 
    from table1, (select @rank := 1, @prev := 0) q 
    order by `transaction` asc 
) q  
    group by gr 

demo here