ALTER TABLE "product-printproducts" DROP COLUMN IF EXISTS listprice, ADD listprice INT NOT NULL DEFAULT 0; UPDATE "product-printproducts" SET listprice = ROUND(price) FROM ( SELECT printid, price * COALESCE(pricepremium, 1) * 100 * CASE printproducts.groupid WHEN 2 THEN 0.2 -- 0.2m2 is the minimum paid size for canvas ELSE 1 END AS price -- 1.0m2 is the same for wallpaper FROM "product-printproducts" printproducts JOIN "product-products" products ON printproducts.productid = products.productid JOIN ( SELECT groupid, MIN(price) AS price FROM "product-printprices" GROUP BY groupid ) prices ON printproducts.groupid = prices.groupid LEFT JOIN ( SELECT designerid, 1 + (pricepremium / 100) AS pricepremium FROM designers ) designers ON products.designerid = designers.designerid ) s WHERE "product-printproducts".printid = s.printid;