Написание функции

Genkopura
Дата: 26.04.2015 18:46:34
Необходимо реализовать функцию, которая бы считала бы по формуле: СУММА(Х*Y)+Z, где Х - это запрос, который выводит стоимость услуг по тарифу пользователя из таблицы t_tariff, Y - это запрос, который выводит число использования пользователем определенной услуги из таблицы t_units (это сумма полей vvalue таблицы t_units, т.е sum(c.vvalue), и сгруппированной по типу услуги(поле ntypeid)), Z - это запрос, который выводит случай использования единичной услуги пользователем (таблица t_cashactions).

Т.е нужно заносить данные в поле "nbalance" таблицы "t_numbers" Сумму(Х*Y)+Z :
UPDATE t_numbers SET nbalance =  СУММА(Х*Y)+Z WHERE id=res.nnumberid


Ниже приведена модель БД.

Первый запрос (Х) я реализовывал так:
SELECT n.vnumber, t.vname, noutfavoritecost, noutsystemcost, noutothercost, noutcityphonecost, noutinternationalcost, nsmscost, nmmscost, nwapcost FROM t_numbers n   -- t_numbers + t_tariff 
FULL JOIN t_contract c 
FULL JOIN t_tariff t ON c.ntariffid=t.id
ON c.id=n.ncontractid
GROUP BY n.vnumber, t.noutfavoritecost, t.vname, noutsystemcost, noutothercost, noutcityphonecost, noutinternationalcost, nsmscost, nmmscost, nwapcost


Второй запрос (таких запросов несколько штук, по каждой услуге):
SELECT c.nnumberid, n.vnumber, t.vname, sum(c.vvalue) as summary FROM t_numbers n   -- t_numbers + t_units
LEFT JOIN t_units c 
LEFT JOIN t_unittype t ON c.ntypeid=t.id
ON c.nnumberid=n.id
WHERE vinout='OUTGOING' AND t.vname = 'WAP'
GROUP BY n.vnumber, t.vname, c.nnumberid


Третий запрос:
SELECT c.nnumberid, n.vnumber, t.vname, sum(c.nvalue) as summary FROM t_numbers n   -- t_numbers + t_cashactions 
FULL JOIN t_cashactions c 
FULL JOIN t_cashactiontype t ON c.ncashactiontypeid=t.id
ON c.nnumberid=n.id
GROUP BY n.vnumber, t.vname, c.nnumberid
Genkopura
Дата: 26.04.2015 18:48:39
Genkopura,