我在数据库中有一个表,其中有对应的主键值。 我想计算两列中的不同值。
我已经知道一种使用并集所有然后在结果表上应用groupby的方法。
Select Id,Brand1
into #Temp
from data
union all
Select Id,Brand2
from data
Select ID,Count(Distinct Brand1)
from #Temp
group by ID
我们也可以只使用临时表在大型查询中完成同样的事情。
样品表
ID Brand1 Brand2
1 A B
1 B C
2 D A
2 A D
结果表
ID Distinct_Count_Brand
1 3
2 2
在此列中您可以看到Distinct_count_Brand它从两个列Brand1和Brand2中计算Brand的唯一计数。
我已经知道一种方法(基本上是不可透视的),但是想知道是否还有其他方法可以对两列中的唯一值进行计数。
答案 0 :(得分:3)
我不知道BigQuery的怪癖,但也许您可以内联联合查询:
SELECT ID, COUNT(DISTINCT Brand)
FROM
(
SELECT ID, Brand1 AS Brand FROM data
UNION ALL
SELECT ID, Brand2 FROM data
) t
GROUP BY ID;
答案 1 :(得分:1)
在SQL Server中,我将使用:
Select b.id, count(distinct b.brand)
from data d cross apply
(values (id, brand1), (id, brand2)) b(id, brand)
group by b.id;
Here是db <>小提琴。
在BigQuery中,等效项表示为:
select t.id, count(distinct brand)
from t cross join
unnest(array[brand1, brand2]) brand
group by t.id;
这是一个BQ查询,证明它可以工作:
with t as (
select 1 as id, 'A' as brand1, 'B' as brand2 union all
select 1, 'B', 'C' union all
select 2, 'D', 'A' union all
select 2, 'A', 'D'
)
select t.id, count(distinct brand)
from t cross join
unnest(array[brand1, brand2]) brand
group by t.id;