【问题标题】:Combining words (tomato,carrot) and display count of locales over time in Big Query [en,en-uk,en-sv,en-au as EN]在 Big Query [en,en-uk,en-sv,en-au as EN] 中组合单词(番茄、胡萝卜)并显示区域设置数
【发布时间】:2019-05-30 05:44:49
【问题描述】:

我目前正在学习 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%' (如何将其设为 OR?)

最后,谁能帮我弄清楚如何使用 NOT CONTAIN in AND url.website 不包含这些单词中的任何一个不区分大小写 (?i) 马铃薯、蘑菇、芹菜

我来自电子表格背景并且是一名高级用户,但我似乎很难将这些知识转移到 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

错误代码:在 Group By 中找不到 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

【问题讨论】:

  • 我在尝试访问谷歌文档时遇到权限被拒绝错误
  • AND (url.website LIKE '%tomato%' OR url.website LIKE '%carrot%'),或使用正则表达式 - 使用单独的问题了解更多详情
  • @FelipeHoffa 谢谢!看着这些东西工作真是太令人满意了!
  • 我找到了一种显示计数的简单方法,但是当我尝试输入日期字段时,报告不会计算所有相同的番茄/胡萝卜 URL,而只是显示不同的价值观。 SELECT url.website count(url.website) as count FROM datatable.report WHERE url.website like '%carrot%' OR url.website like '%tomato%' Group by url.website 主要的要点是在选择中添加report.timestamp,这样我就可以按聚合月份绘制。有什么见解吗?将继续修补。

标签: sql google-bigquery case dremel


【解决方案1】:

以下是 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    

【讨论】:

  • 很高兴它对你有用。也考虑对答案投票 - 这对 SO 来说同样重要
猜你喜欢
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2023-03-27
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多