SELECT
COUNT(*) AS pu_groups,
COUNT(pension_scheme_id) AS groups_with_scheme,
COUNT(strategy_id) AS groups_with_strategy,
COUNT(*) FILTER (
WHERE sum_dt IS NOT NULL
OR sum_ct IS NOT NULL
) AS groups_with_pu_sums
FROM (
SELECT
acc,
pension_scheme_id,
strategy_id,
contract_class_code,
SUM(sum_dt) AS sum_dt,
SUM(sum_ct) AS sum_ct
FROM temp_sum
GROUP BY
acc,
pension_scheme_id,
strategy_id,
contract_class_code
) prepared;