Объединение слов (помидор, морковь) и отображение количества локалей с течением времени в большом запросе [en,en-uk,en-sv,en-au как 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, поскольку я начинаю этот путь, но мне нужно еще больше объединить / обобщить данные, уже находящиеся в таблице, чтобы я мог построить диаграмму.
Кто-нибудь может указать какие-либо области оптимизации? Кроме того, дополнительный запрос: AND url.website, например, "%tomato%" или "%carrot%" (Как сделать это ИЛИ?)
Наконец, кто-нибудь может помочь мне понять, как использовать NOT CONTAIN в AND url.website не содержит ни одного из этих слов без учета регистра (? I) potato,Mushroom,Celery
Я из опыта работы с электронными таблицами и являюсь опытным пользователем, но мне кажется, что мне трудно перенести эти знания в 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 не найден в Group By, но если я добавлю его, я получу микросекунды в одном столбце и количество появлений этих микросекунд.
Основная идея состоит в том, чтобы добавить report.timestamp в select, чтобы я мог построить график по агрегированному месяцу, но после этого значения подсчета не суммируются.
[Прошлое Править 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 ответ
Ниже для 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