sql - 在 SQL Big Query 中的类别中查找重叠
问题描述
我正在尝试做与此类似的事情,但在 BigQuery 中。我有几个用户可能有 1 个或多个类别。我必须找到类别内的重叠。像这样的东西:
我想要的结果是这样的:
也就是说,例如,只有一个用户只有类别 D(而没有其他用户),两个用户有类别 10 和 30,依此类推。
主要问题是我有很多类别(超过 40 个)。以前我做过类似的事情:
SELECT sum(cat1), sum(cat2), sum(cat3)
FROM table
where cat1 = 0 and cat2 = 1 and cat3 = 0
这种方法很有效,但是太手动了,现在不可能,因为我有很多类别。如果可能的话,想使用 BigQuery。
解决方案
主要问题是我有很多类别(超过 40 个)。
考虑以下(BigQuery)方法 - 适用于任何合理数量的类别
execute immediate (
select '''
select * from (
select distinct t1.usr,
t1.categories category, t2.categories category2
from `your_table` t1 left join `your_table` t2
on t1.usr = t2.usr and t1.categories != t2.categories
union all
select usr, any_value(categories) category, any_value(categories) category2
from `your_table`
group by usr
having count(1) = 1
)
pivot (count(usr) cat for category2 in (''' || list || '''))
order by category
'''
from (
select string_agg("'" || categories || "'" order by categories) list
from (select distinct categories from `your_table`)
)
)
如果应用于您问题中的样本数据 - 输出是
推荐阅读
- javascript - 在 vue js 中 axios 调用后如何更新头部标题
- flutter - 如何为 Flutter UI 创建聊天消息气泡
- kubernetes - hazelcast-kubernetes 在 java 11 中启用了集群 ClassNotFoundException
- python - 如何遍历两个不同长度的列表,然后仅将那些不相似的值保存在新列表中
- javascript - 如何将多个 ID 添加到 discord.js 检查?
- java - 如何将自定义 setContent 方法添加到 Spring Content
- java - 无法识别简单的代码方法(Intent、finish() 等)
- r - 用R中的分组和条件根据条件替换一行中的负值
- c# - 为什么在 MRTK for Unity 中为 TouchHandler 中的事件分配操作失败?
- javascript - Jquery搜索在手风琴中无法正常工作?