在Big Query中组合单词(西红柿,胡萝卜)并随时间显示语言环境计数[en,en-uk,en-sv,en-au as EN]

时间:2019-05-30 05:44:50

标签: sql google-bigquery case dremel

我目前正在使用SQL,遇到了问题。

这个问题对我来说涉及许多用例。我在en-uk,en-au,es-latam和es-spain有语言环境,我想将它们简单地合并为EN或ES,以便随时间进行报告。

下面是有关如何计算番茄页面浏览量和胡萝卜页面浏览量的示例。

我希望一旦弄清楚如何做到这一点,就可以将其应用于语言环境。

可以在此电子表格的H:L列中看到预期的输出:https://docs.google.com/spreadsheets/d/1CNE__ikiHEQHedH0UiSPmRI1s47e7qEH_aJJVtYSSzU/edit?usp=sharing

在开始这个旅程时,我不熟悉CASE,但是我需要对表中已经存在的数据进行汇总/汇总,以便构建图表。

谁能指出任何优化领域?另外,附带要求:     和url.website之类的“%tomato%”或“%carrot%”(如何将其设为“或”?)

最后,有人可以帮助我弄清楚如何在其中使用NOT CONTAIN     AND url.website不包含以下任何一个单词,不区分大小写(?i)     土豆,蘑菇,芹菜

我来自Spreadsheets背景,并且是高级用户,但是好像我很难将这些知识转移到SQL上。

非常感谢!如果您有任何疑问,请告诉我

经过多次论坛搜索后,我知道我需要在此处插入一个子查询才能获得预期的表。我的目的是将这些网站页面访问的次数绘制成图表。

[最近编辑]

在右侧显示带有计数号的URL

SELECT
url.website
report.timestamp
count(url.website) as count
FROM
datatable.report
WHERE url.website like '%carrot%' OR url.website like '%tomato%'
Group by url.website

错误代码:在分组依据中找不到report.timestamp-但是,如果我添加它,我会在一列中获得微秒,并且这些微秒的出现次数也是如此。

主要要点是在选择中添加report.timestamp,以便可以按汇总月份进行绘图,但是一旦执行此操作,就不会对计数值求和。

[过去编辑2]

  SELECT
  url.website
  COUNT(url.website) as Count
  (CASE WHEN report.web.url like '%carrot%' then 'carrot website'
  WHEN report.web.url like '%tomato%' then 'tomato website'
  ELSE 'other website'
  END)

  FROM datatable.report
  WHERE (product.tag = 12345)
  AND url.website NOT IN ('Potato','Mushroom','Celery')
  AND url.website like '%tomato%'
  GROUP BY url.website

[过去编辑3]

 SELECT
 (CASE WHEN url.website like '%carrot%' THEN 'carrot'
 WHEN url.website like '%tomato%' THEN 'tomato'
 ELSE 'other'
 END)
 url.website
 COUNT(carrot) as carrotwebsite
 COUNT(fundamental) As tomatowebsite

*thinking that maybe I needed to case/group them first, then show the 
 count 
 displays.

请参见公共电子表格中的H:L列:https://docs.google.com/spreadsheets/d/1CNE__ikiHEQHedH0UiSPmRI1s47e7qEH_aJJVtYSSzU/edit?usp=sharing

1 个答案:

答案 0 :(得分:2)

以下是用于BigQuery标准SQL

#standardSQL
SELECT FORMAT_DATE('%b %Y', PARSE_DATE('%m/%d/%Y', dt)) month_year, 
  COUNTIF(url LIKE '%tomato%') tomato_views,
  COUNTIF(url LIKE '%carrot%') carrot_views,
  COUNTIF(NOT url LIKE '%tomato%' AND NOT url LIKE '%carrot%') other_views
FROM `project.dataset.table`
GROUP BY month_year  

您可以使用示例/虚拟数据来测试,玩游戏,如以下示例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1/1/2019' dt, 'www.websiteurl.com/tomato/page1' url UNION ALL
  SELECT '1/10/2019', 'www.websiteurl.com/tomato/page2' UNION ALL
  SELECT '1/3/2019', 'www.websiteurl.com/tomato/page3' UNION ALL
  SELECT '2/4/2019', 'www.websiteurl.com/tomato/page4' UNION ALL
  SELECT '2/21/2019', 'www.websiteurl.com/tomato/page5' UNION ALL
  SELECT '2/7/2019', 'www.websiteurl.com/tomato/page6' UNION ALL
  SELECT '3/7/2019', 'www.websiteurl.com/tomato/page7' UNION ALL
  SELECT '3/15/2019', 'www.websiteurl.com/tomato/page8' UNION ALL
  SELECT '3/29/2019', 'www.websiteurl.com/tomato/page9' UNION ALL
  SELECT '3/16/2019', 'www.websiteurl.com/tomato/page10' UNION ALL
  SELECT '1/11/2019', 'www.websiteurl.com/carrot/page1' UNION ALL
  SELECT '1/12/2019', 'www.websiteurl.com/carrot/page2' UNION ALL
  SELECT '4/10/2019', 'www.websiteurl.com/carrot/page3' UNION ALL
  SELECT '4/10/2019', 'www.websiteurl.com/carrot/page4' UNION ALL
  SELECT '4/18/2019', 'www.websiteurl.com/carrot/page5' UNION ALL
  SELECT '1/16/2019', 'www.websiteurl.com/carrot/page6' UNION ALL
  SELECT '1/17/2019', 'www.websiteurl.com/carrot/page7' UNION ALL
  SELECT '1/18/2019', 'www.websiteurl.com/turnip/home' UNION ALL
  SELECT '1/19/2019', 'www.websiteurl.com/turnip/resources' 
)
SELECT FORMAT_DATE('%b %Y', PARSE_DATE('%m/%d/%Y', dt)) month_year, 
  COUNTIF(url LIKE '%tomato%') tomato_views,
  COUNTIF(url LIKE '%carrot%') carrot_views,
  COUNTIF(NOT url LIKE '%tomato%' AND NOT url LIKE '%carrot%') other_views
FROM `project.dataset.table`
GROUP BY month_year   

有结果

Row month_year  tomato_views    carrot_views    other_views  
1   Jan 2019    3               4               2    
2   Feb 2019    3               0               0    
3   Mar 2019    4               0               0    
4   Apr 2019    0               3               0