Ниже для BigQuery Standard SQL
Опция без подвыборов
#standardSQL
WITH estrato_contrato AS (
SELECT ESTRATO, CONTRATO, COUNT(*) AS COUNT FROM `mytable` GROUP BY ESTRATO, CONTRATO
)
SELECT
ESTRATO,
COUNT(CONTRATO) AS only_once_contract,
SUM(COUNT) AS total,
ARRAY_LENGTH(ARRAY_AGG(IF(COUNT > 1, CONTRATO, NULL) IGNORE NULLS)) AS at_least_one
FROM estrato_contrato ec
GROUP BY ESTRATO
И, наконец, самый простой вариант (примечание: вам не нужно беспокоиться о различных значенияхво внешнем выборе, потому что об этом уже позаботились в estrato_contrato
#standardSQL
WITH estrato_contrato AS (
SELECT ESTRATO, CONTRATO, COUNT(*) AS COUNT FROM `mytable` GROUP BY ESTRATO, CONTRATO
)
SELECT
ESTRATO,
COUNT(CONTRATO) AS only_once_contract,
SUM(COUNT) AS total,
COUNTIF(COUNT > 1) AS at_least_one
FROM estrato_contrato ec
GROUP BY ESTRATO