我有一个BigQuery表,其中包含一个列,其中包含“类别”列表(由“/”分隔):
{
"ID": "452",
"Location": "France",
"Calories": "400",
"Categories": "/ brown / nutty / salty /"
},
{
"ID": "288",
"Location": "UK",
"Calories": "800",
"Categories": "/ brown / roasted / nutty /"
},
我使用Google Data Studio中的以下SQL查询连接到我的表:
#standardSQL
SELECT
ID,
Location,
Calories,
Categories
FROM table_name;
我试图通过'Categories'对表中的行进行分组 .
然后,我应该能够按类别过滤行,并且可以对指标进行平均 . 在上面的例子中,如果我按'坚果'过滤,平均'卡路里'将是'600' .
我试过的CASE表达式只允许我匹配Category列中的最后一个'Category',而不是匹配包含该字符串的所有行:
CASE
WHEN REGEXP_MATCH(Categories, '.*nutty.*') THEN 'Nutty'
WHEN REGEXP_MATCH(Categories, '.*brown.*') THEN 'Brown'
WHEN REGEXP_MATCH(Categories, '.*salty.*') THEN 'Salty'
END
我认为这是一个聚合问题,但有没有办法允许每行在“类别”维度内以这种方式多次匹配?
任何帮助非常感谢,谢谢 .
2 回答
在您的用例中使用
CASE
是不切实际的 - 您应该使用REGEXP_EXTRACT_ALL()
或SPLIT()
以及UNNEST()
,如下例所示(BigQuery Standard SQL)这将给你以下结果
现在,你可以
GROUP BY
你想要的任何逻辑,所有类别将被适当地计算这里的数据如下:
views:349493
标签:"javascript|html|css"
解决方案:
JOIN
至SPLIT(tags) tag
,GROUP BY tag
.