Объединение слов (помидор, морковь) и отображение количества локалей с течением времени в большом запросе [en, en-uk, en-sv, en-au как EN] - PullRequest
1 голос
/ 30 мая 2019

Я сейчас беру 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, поскольку я начинаю этот путь, но мне нужно еще больше объединить / обобщить данные, уже находящиеся в таблице, чтобы я мог построить диаграмму.

Кто-нибудь может указать какие-либо области оптимизации?Кроме того, дополнительный запрос: AND url.website, например, "% tomato%" или "% carrot%" (Как мне сделать это ИЛИ?)

Наконец, кто-нибудь может мне помочь разобраться, как использоватьa NOT CONTAIN в AND url.website не содержит ни одного из этих слов без учета регистра (? i) картофель, грибы, сельдерей

Я пришел из таблицы и являюсь опытным пользователем, но мне кажется, что яЯ с трудом переношу эти знания в SQL.

Большое спасибо!И, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы,

После многих поисков на форуме, я понимаю, что мне нужно будет вставить сюда подзапрос, чтобы получить нужную таблицу.Я хочу построить график количества посещений этих веб-сайтов в виде графика с течением времени.

[Most EDIT]

Показывает URL с номером Count в правой части

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 не найден в Group By - но если я добавлю его, я получу микросекунды в одном столбце и количество появлений этих микросекунд.

Основная суть заключается в добавленииметка report.time в select, чтобы я мог построить график по агрегированному месяцу, но после этого значения счетчиков не суммируются.

[Past Edit 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 Ответ

2 голосов
/ 30 мая 2019

Ниже для BigQuery Standard 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    
...