在 Big Query [en,en-uk,en-sv,en-au as EN] 中组合单词(番茄、胡萝卜)并随时间显示语言环境计数
Combining words (tomato,carrot) and display count of locales over time in Big Query [en,en-uk,en-sv,en-au as EN]
我目前正在取货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,因为我开始踏上这段旅程,但我需要 aggregate/summarize 已经在 table 中的数据,以便我可以构建图表。
谁能指出任何优化方面?此外,附带要求:
AND url.website 喜欢 '%tomato%' 或 '%carrot%' (我如何使它成为 OR?)
最后,谁能帮我弄清楚如何在中使用 NOT CONTAIN
AND url.website 不包含任何不区分大小写的单词 (?i)
土豆、蘑菇、芹菜
我有电子表格背景并且是高级用户,但似乎我很难将这些知识转移到 SQL。
非常感谢!如果您有任何问题,请告诉我,
经过多次论坛搜索,我知道我需要在此处插入一个子查询才能获得预期的 table。我的目标是绘制这些网站页面访问次数随时间变化的图表。
[最近编辑]
在右侧显示 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 在分组依据中找不到 - 但如果我添加它,我会在一列中得到微秒,以及这些微秒的出现次数。
主要要点是在 select 中添加 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.
请参阅 public 电子表格中的 H:L 列:https://docs.google.com/spreadsheets/d/1CNE__ikiHEQHedH0UiSPmRI1s47e7qEH_aJJVtYSSzU/edit?usp=sharing
以下适用于 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
您可以使用 sample/dummy 数据进行测试,如以下示例所示
#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
我目前正在取货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,因为我开始踏上这段旅程,但我需要 aggregate/summarize 已经在 table 中的数据,以便我可以构建图表。
谁能指出任何优化方面?此外,附带要求: AND url.website 喜欢 '%tomato%' 或 '%carrot%' (我如何使它成为 OR?)
最后,谁能帮我弄清楚如何在中使用 NOT CONTAIN AND url.website 不包含任何不区分大小写的单词 (?i) 土豆、蘑菇、芹菜
我有电子表格背景并且是高级用户,但似乎我很难将这些知识转移到 SQL。
非常感谢!如果您有任何问题,请告诉我,
经过多次论坛搜索,我知道我需要在此处插入一个子查询才能获得预期的 table。我的目标是绘制这些网站页面访问次数随时间变化的图表。
[最近编辑]
在右侧显示 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 在分组依据中找不到 - 但如果我添加它,我会在一列中得到微秒,以及这些微秒的出现次数。
主要要点是在 select 中添加 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.
请参阅 public 电子表格中的 H:L 列:https://docs.google.com/spreadsheets/d/1CNE__ikiHEQHedH0UiSPmRI1s47e7qEH_aJJVtYSSzU/edit?usp=sharing
以下适用于 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
您可以使用 sample/dummy 数据进行测试,如以下示例所示
#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