每组SQL不同的值 - 如何“按组”分组并获取每组不同值的列表?

4

我需要执行一个bigquery/standard SQL语句(或一系列语句),进行“group by”操作,并针对每个组返回不重复值列表,而非计数。

例如,对于具有标题H1,H2的表:

H1 H2  
--|--
a  a   
a  b
a  c
b  x
b  x
b  y

"group by" H1 期望的结果:

a->a,b,c
b->x,y

您可以参考以下链接获取帮助- https://dev59.com/64zda4cB1Zd3GeqPs-0_ - mkRabbani
4个回答

3
如果您正在使用array_agg,请不要忘记使用DISTINCT。
select h1, array_agg(DISTINCT h2)
from t
group by h1;

1
请注意,如果您使用的是 MySql,则没有 array_agg 函数。但是,您可以使用 group_concat 来代替。 - Rotem Grimberg

2
你可以使用STRING_AGG()函数 - 在这里找到参考资料
SELECT H1, STRING_AGG(H2) AS H2 
FROM tablename
group by H1

1
在 MySQL 中是 GROUP_CONCAT,在 PostgreSQL 和 BigQuery 中是 STRING_AGG。 - dov.amir
这个确实适用于谷歌大查询。谢谢! - undefined

1
我建议你使用array_agg()
select h1, array_agg(h2)
from t
group by h1;

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

0

使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接