SQL 每组不同的值 - 如何 "group by" 并获取每组不同值的列表?
SQL distinct values per group - how to "group by" and get a list of distinct values per group?
我需要执行 bigquery/standard SQL 语句(或一系列语句)来执行 "group by" 和 returns 每个组的不同值列表(不算数)。
例如对于具有 headers 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
您可以使用 STRING_AGG()
- 在此处找到 reference
SELECT H1, STRING_AGG(H2) AS H2
FROM tablename
group by H1
我建议您使用 array_agg()
:
select h1, array_agg(h2)
from t
group by h1;
如果您使用的是 BigQuery,请学习使用数组。他们很强大。
如果您正在使用 array_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
如果你想让上面的distinct分组再次展平:
select h1, item from (
select
h1,
array_agg(distinct h2) as items
from `dataset.table`
group by h1
), unnest(items) as item
我需要执行 bigquery/standard SQL 语句(或一系列语句)来执行 "group by" 和 returns 每个组的不同值列表(不算数)。
例如对于具有 headers 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
您可以使用 STRING_AGG()
- 在此处找到 reference
SELECT H1, STRING_AGG(H2) AS H2
FROM tablename
group by H1
我建议您使用 array_agg()
:
select h1, array_agg(h2)
from t
group by h1;
如果您使用的是 BigQuery,请学习使用数组。他们很强大。
如果您正在使用 array_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
如果你想让上面的distinct分组再次展平:
select h1, item from (
select
h1,
array_agg(distinct h2) as items
from `dataset.table`
group by h1
), unnest(items) as item