Ниже приведено значение для BigQuery Standard SQL
#standardSQL
SELECT *
REPLACE((
SELECT STRING_AGG(DISTINCT i) FROM t.list_intitution i
) AS list_intitution
)
FROM (
SELECT
id,
institution,
COUNT(DISTINCT institution) OVER (PARTITION BY id) AS count_intitution,
ARRAY_AGG(institution) OVER (PARTITION BY id) AS list_intitution
FROM
name_table
WHERE
DATE(created_at) = "2020-02-02"
) t
Примечание: в исходном запросе вы просто удаляете DISTINCT и используете ARRAY_AGG вместо STRING_AGG, но затем во внешнем запросе вы обрабатываете этот массив для формирования списка отдельные значения из этого массива
Ниже приведен ответ на ваш обновленный вопрос
Вы можете просто использовать GROUP BY, как в примере ниже
#standardSQL
SELECT id,
COUNT(DISTINCT institution) AS count_institution,
STRING_AGG(DISTINCT institution) AS list_institution
FROM name_table
GROUP BY id
Если чтобы применить к образцу данных из вашего вопроса, как в примере ниже
#standardSQL
WITH name_table AS (
SELECT 1 id, 'a' institution UNION ALL
SELECT 1, 'b' UNION ALL
SELECT 2, 'a' UNION ALL
SELECT 2, 'c' UNION ALL
SELECT 3, 'a' UNION ALL
SELECT 1, 'a'
)
SELECT id,
COUNT(DISTINCT institution) AS count_institution,
STRING_AGG(DISTINCT institution) AS list_institution
FROM name_table
GROUP BY id
результат
Row id count_institution list_institution
1 1 2 a,b
2 2 2 a,c
3 3 1 a