MySQL сделать расчет на основе нескольких результатов - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть таблица с полями ID, action и value. ID - это имя записи, action - это идентификатор того, что представляет значение. Значения идентификатора в таблице дублируются с различными действиями и значениями.

Пример:

ID      action      value
3603    1           78
3603    2           2
3603    3           1
5645    1           45
etc...

Теперь я хотел бы построить оператор select, который каким-то образом получал бы значения, где ID = 3603 и формула (если действие 1, то значение * 10, если действие 2, то значение * 5, а если действие 3, то значение * 2) , Результат для 3603 - 792.

Кроме того, мне нужно, чтобы это было присоединено к другой таблице, где у меня одинаковое значение идентификатора (уникальное), и мне нужно упорядочить по этой сумме обе таблицы ...

Возможно ли это, или я должен сделать какую-нибудь накопительную таблицу, в которой хранятся эти суммы для каждой записи? Проблема в том, что это статистические расчеты, поэтому каждый идентификатор будет получать 3 входных данных действий для каждого месяца и каждого года (ежемесячная статистика).

Ответы [ 4 ]

1 голос
/ 12 декабря 2011
select id,action,sum(
CASE t.action 
  WHEN 1 then t.value * 10 
  when 2 then value*5 
  when 3 then value*2 end
) AS S

from table_multy t join table_single s on t.id=s.id
group by t.id
order by ( sum(
CASE t.action 
  WHEN 1 then t.value * 10 
  when 2 then value*5 
  when 3 then value*2 end
) + s.other_val )

для сохранения в исторической таблице используйте:

insert into thistory (col1,clo2,clon) select ....
1 голос
/ 12 декабря 2011
select sum(CASE t.action WHEN  1 then t.value * 10 when 2 then value*5 when 3 then value*2 end) from table t
group by t.id

При выборе выше вычисляется сумма для данной таблицы на основе идентификаторов

.
1 голос
/ 12 декабря 2011

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

select table_with_fields.ID, 
   table_2.field_1,
   table_2.field_2,
   sum(
      CASE action 
         when 1 then value * 10
         when 2 then value * 5
         when 3 then value * 2
       END) as full_amount
from table_with_fields 
   join table_2 on table_with_fields.id = table_2.id
group by table_with_fields.ID, 
   table_2.field_1,
   table_2.field_2
order by full_amount
1 голос
/ 12 декабря 2011
 select sum(
 case 
 when action = 1 then value * 10
 when action = 2 then value * 5
 when action = 3 then value * 2
 end) as total
 from table
 where id = 3603 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...