CREATE TYPE store.generateMyyntiRaportty_type (int products_id, VARCHAR(20) products_name, bigint amount, NUMERIC(6,2) moneyamount);CREATE OR REPLACE FUNCTION store.generateMyyntiRaporttiRETURNS SETOF store.generateMyyntiRaportti_typeAS $$ select d.id as id, d.name as name, sum(b.amount) as amount, (SELECT sum(store.transaction_items.price * store.transaction_items.amount) FROM store.transaction_items, store.products_deposit, store.transactions WHERE store.transaction_items.products_deposit_id = store.products_deposit.id AND store.products_deposit.products_id = d.id AND store.transactions.id = store.transaction_items.transactions_id AND store.transactions.ts >= $1 AND store.transactions.ts <= $2 ) as moneyamount FROM store.transactions as a, store.transaction_items as b, store.products_deposit as c, store.products as d WHERE a.id = b.transactions_id AND b.products_deposit_id = c.id AND c.products_id = d.id AND ts >= $1 AND ts <= $2 group by d.id, d.name; $$ LANGUAGE SQL STABLE;CREATE TYPE store.generateMyyntiRaporttyByCategory_type (int id, VARCHAR(20) name, bigint amount, NUMERIC(6,2) moneyamount);CREATE OR REPLACE FUNCTION store.generateMyyntiRaporttiByCategoryRETURNS SETOF store.generateMyyntiRaporttiByCategory_typeAS $$ SELECT a.id, a.name, (SELECT sum(b.amount) FROM store.transaction_items as b, store.products_deposit as c, store.products as d, store.transactions as e WHERE b.products_deposit_id = c.id AND c.products_id = d.id AND d.product_classes_id = a.id AND e.id = b.transactions_id AND e.ts >= $1 AND e.ts <= $2 ) as amount, (SELECT sum(b.price * b.amount) FROM store.transaction_items as b, store.products_deposit as c, store.products as d, store.transactions as e WHERE b.products_deposit_id = c.id AND c.products_id = d.id AND d.product_classes_id = a.id AND b.transactions_id = e.id AND e.ts >= $1 AND e.ts <= $2 ) FROM store.product_classes as a; $$ LANGUAGE SQL STABLE;