GoogleData Studio中如何使用CASE表达式匹配多行(SQL/Big查询数据集)

How to use a CASE expression to match multiples rows in Google Data Studio (SQL/Big Query data set)

我有一个 BigQuery table,其中包含一个包含 'categories' 列表的列(由“/”分隔):

  {
    "ID": "452",
    "Location": "France",
    "Calories": "400",
    "Categories": "/ brown / nutty / salty /"
  },
  {
    "ID": "288",
    "Location": "UK",
    "Calories": "800",
    "Categories": "/ brown / roasted / nutty /"
  },

我在 Google Data Studio 中使用以下 SQL 查询连接到我的 table:

#standardSQL
SELECT
ID,
Location,
Calories,
Categories
FROM table_name;

我正在尝试按 'Categories' 对 table 中的行进行分组。

然后我应该能够按类别过滤行,并且可以计算指标的平均值。在上面的示例中,如果我按 'Nutty' 过滤,则平均值 'Calories' 将为“600”。

我试过的 CASE 表达式只允许我匹配类别列中的最后一个 'Category',而不是匹配包含字符串的所有行:

CASE
WHEN REGEXP_MATCH(Categories, '.*nutty.*') THEN 'Nutty'
WHEN REGEXP_MATCH(Categories, '.*brown.*') THEN 'Brown'
WHEN REGEXP_MATCH(Categories, '.*salty.*') THEN 'Salty'
END

我认为这是一个聚合问题,但是有什么方法可以让每一行以这种方式在 'Category' 维度中多次匹配?

非常感谢任何帮助,谢谢。

此处的数据如下所示:

  • 观看次数:349493
  • 标签:"javascript|html|css"

解决方案:JOINSPLIT(tags) tagGROUP BY tag

#standardSQL
SELECT SUM(view_count) views, tag
FROM (
  SELECT *
  FROM `bigquery-public-data.Whosebug.posts_questions`, UNNEST(SPLIT(tags,'|')) tag
)
GROUP BY tag
ORDER BY 1 DESC
LIMIT 10

在您的用例中使用 CASE 是不切实际的 - 您应该使用 REGEXP_EXTRACT_ALL()SPLIT() 以及 UNNEST() 如下例所示(BigQuery Standard SQL)

 #standardSQL
WITH `project.dataset.your_table` AS (
  SELECT "452" ID,"France" Location,400 Calories,"/ brown / nutty / salty /" Categories
    UNION ALL
  SELECT "288","UK",800,"/ brown / roasted / nutty /"    
)
SELECT ID, Location, Calories, Category
FROM `project.dataset.your_table`, 
UNNEST(REGEXP_EXTRACT_ALL(Categories, r' (\w+) ')) Category  

这会给你下面的结果

Row ID  Location    Calories    Category     
1   452 France      400         brown    
2   452 France      400         nutty    
3   452 France      400         salty    
4   288 UK          800         brown    
5   288 UK          800         roasted  
6   288 UK          800         nutty    

现在,您可以 GROUP BY 任何您想要的逻辑,所有类别都将被适当地考虑