每个组的SQL不同值-如何;分组方式;并获得每组不同值的列表?

每个组的SQL不同值-如何;分组方式;并获得每组不同值的列表?,sql,group-by,google-bigquery,distinct,Sql,Group By,Google Bigquery,Distinct,我需要执行一个bigquery/标准SQL语句(或一系列语句),该语句执行“GROUPBY”,并为每个组返回一个不同值的列表(而不是count) 例如,对于标题为H1、H2的表 H1 H2 --|-- a a a b a c b x b x b y “分组方式”H1的预期结果: 您可以使用STRING\u AGG() SELECT H1, STRING_AGG(H2) AS H2 FROM tablename group by H1 我建议您使用array\u agg

我需要执行一个bigquery/标准SQL语句(或一系列语句),该语句执行“GROUPBY”,并为每个组返回一个不同值的列表(而不是count)

例如,对于标题为H1、H2的表

H1 H2  
--|--
a  a   
a  b
a  c
b  x
b  x
b  y
“分组方式”H1的预期结果:


您可以使用
STRING\u AGG()

SELECT H1, STRING_AGG(H2) AS H2 
FROM tablename
group by H1

我建议您使用
array\u agg()


如果您使用的是BigQuery,请学习使用数组。它们非常强大。

如果您使用的是
array\u agg
不要忘记使用DISTINCT

select h1, array_agg(DISTINCT h2)
from t
group by h1;
使用BigQuery数组

select 
   h1, 
   array_agg(distinct h2) as items
from `dataset.table`
group by h1
如果要再次展平上述不同分组:

select h1, item from (
   select 
      h1, 
      array_agg(distinct h2) as items
   from `dataset.table`
   group by h1
), unnest(items) as item

您可以从mysql及其组_CONCAT以及psotgres和bigquery字符串_agg中获取帮助,以供将来参考。请记住,如果您使用mysql,则没有array_agg函数。但是你可以用group_concat来代替
select 
   h1, 
   array_agg(distinct h2) as items
from `dataset.table`
group by h1
select h1, item from (
   select 
      h1, 
      array_agg(distinct h2) as items
   from `dataset.table`
   group by h1
), unnest(items) as item