Collectives
Stats
Top backers
SELECT max(c.name) as backer, concat('https://opencollective.com/',max(c.slug)) as "backer profile",
sum(t."amount")/ 100 as "totalAmount", max(t.currency) as currency
FROM "Transactions" t
LEFT JOIN "Collectives" c ON c.id = t."FromCollectiveId"
WHERE t."CollectiveId"=19965
AND t.type='CREDIT'
AND t."deletedAt" IS NULL
GROUP BY t."FromCollectiveId"
ORDER BY "totalAmount" DESC
Revenue breakdown per tier
SELECT max(t.name) as ticket, sum(o.quantity) as count,
sum("totalAmount") / 100 as "totalAmount", max(o.currency) as currency
FROM "Orders" o
LEFT JOIN "Tiers" t ON t.id = o."TierId"
WHERE o."CollectiveId"=19965
AND o.status='PAID'
AND o."deletedAt" IS NULL
GROUP BY o."TierId"
Breakdown of expenses
WITH expenses AS (
SELECT max(category) as category, max(description) as description,
sum(amount) as amount, max(currency) as currency
FROM "Expenses"
WHERE "CollectiveId"=19965
GROUP BY description
ORDER BY amount DESC
)
SELECT max(category) as category, count(*) as count,
sum(amount) / 100 as "totalAmount", max(e.currency) as currency,
string_agg(concat(e.description, ' (', e.currency, ' ',e.amount / 100,')'), ', ') as "expenses"
FROM "expenses" e
GROUP BY category
ORDER BY "totalAmount" DESC
List of backers with first and last donation
SELECT o."createdAt", MAX(s."updatedAt") as "updateAt", bool_and(s."isActive") as "isActive", MAX(t."createdAt") as "lastTransactionAt", MAX(backer.slug) as "profile", o."totalAmount" as "orderAmount", SUM(t.amount) as "totalAmountInCents"
FROM "Orders" o
LEFT JOIN "Subscriptions" s ON s.id = o."SubscriptionId"
LEFT JOIN "Collectives" c on c.id = o."CollectiveId"
LEFT JOIN "Collectives" "backer" on backer.id = o."FromCollectiveId"
LEFT JOIN "Transactions" t ON t."OrderId" = o.id
WHERE c.slug='babel' AND t.type='CREDIT'
GROUP BY o.id
ORDER BY "totalAmountInCents" DESC
Number of donations and total donations per month per collective
SELECT
substring(cast(DATE_TRUNC('month', t."createdAt") as text) from 1 for 7) as month,
MAX(g.slug) as collective,
count(t.*) as "totalDonations",
SUM(t.amount)/100 as "totalDonationsAmount",
(SUM(t.amount)/100)/count(t.*) as "avgDonation",
MAX(g.currency) as "currency"
FROM "Transactions" t LEFT JOIN "Collectives" g ON t."CollectiveId" = g.id
WHERE t.type='CREDIT' AND t."deletedAt" is NULL AND slug = 'webpack' AND t."PaymentMethodId" IS NOT NULL
GROUP BY month
ORDER BY month ASC
Export
Export all backers of a collective with private data (user.email)
SELECT mc."createdAt", m.role, u.email, mc.name, mc.description, mc.website, mc."twitterHandle"
FROM "Collectives" c
LEFT JOIN "Members" m ON m."CollectiveId" = c.id
LEFT JOIN "Collectives" mc ON m."MemberCollectiveId" = mc.id
LEFT JOIN "Users" u ON u."CollectiveId" = mc.id
WHERE c.slug='becoworking' AND m.role != 'HOST'
New collectives for the past XX and creator details
select
c.id as "collectiveId",
slug,
c."createdAt" as "collectiveCreatedAt",
"HostCollectiveId",
tags,
u."firstName" as firstname,
u."lastName" as lastname,
u.email as email
from "Collectives" as c
left join "Users" u on c."CreatedByUserId" = u.id
where
type ilike 'collective'
and c."deletedAt" is null
and u."deletedAt" is null
and c."createdAt" > '2017-11-15';
Expenses
Note: this export includes private data (user.email, expense.attachment)
SELECT
e."incurredAt",
e.status,
e.amount,
e.currency,
e.category,
e.description,
e."privateMessage",
e.attachment,
u."firstName",
u."lastName",
u.email
FROM "Expenses" e
LEFT JOIN "Users" u on e."UserId" = u.id
WHERE e."CollectiveId" = 302
Administration
Cancel all active subscriptions
Need to update CollectiveId
(here 967) and deactivatedAt
BEGIN;
with subscriptions as (
SELECT "SubscriptionId" as id
FROM "Orders"
WHERE "CollectiveId"=967 AND status='ACTIVE'
)
UPDATE "Subscriptions"
SET "isActive" = false, "deactivatedAt" = '2018-10-27'
WHERE id IN (select id from "subscriptions");
UPDATE "Orders" SET status = 'CANCELLED'
WHERE status='ACTIVE' AND "CollectiveId" = 967;
COMMIT;
Last updated