Skip to content

Instantly share code, notes, and snippets.

@samuelbalogh
Last active June 19, 2018 11:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samuelbalogh/3cac506d9770377f3558b8b75cd34cfe to your computer and use it in GitHub Desktop.
Save samuelbalogh/3cac506d9770377f3558b8b75cd34cfe to your computer and use it in GitHub Desktop.
migration with common table expressions
WITH
migrated_invoices AS (
UPDATE invoices
SET invoice_type='cutting_edge',
WHERE invoice_type='oldie'
RETURNING id, status, amount, project_id
),
invoice_amounts_by_status AS (SELECT
project_id AS invoice_project_id,
sum((CASE WHEN (migrated_invoices.status = 'paid')
THEN (migrated_invoices.amount)
ELSE 0
END)
) AS invoice_amount_paid,
sum((CASE
WHEN (migrated_invoices.status = 'pending'))
THEN (migrated_invoices.amount)
ELSE 0
END)
) AS invoice_amount_projected,
array_agg(migrated_invoices.id) AS additional_invoice_ids
FROM migrated_invoices
GROUP BY project_id)
UPDATE projects
SET
invoice_ids = array_cat(projects.invoice_ids, additional_invoice_ids),
total_paid = total_paid + invoice_amount_paid,
total_projected = total_projected + invoice_amount_projected,
FROM migrated_invoices, invoice_amounts_by_status
WHERE projects.id = migrated_invoices.project_id AND
projects.id = invoice_project_id
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment