Шаг 087. Находим возможную каннибализацию через GROUP_CONCAT

sqlГлава 7. CTE, VIEW и оконные функции

Что делаем

Находим возможную каннибализацию через GROUP_CONCAT

Зачем SEO-специалисту

Если один запрос ведет на несколько URL, страницы могут конкурировать друг с другом.

Код. Вставьте 1 в 1

SELECT query,
       COUNT(DISTINCT page_id) AS pages_count,
       GROUP_CONCAT(DISTINCT page_id) AS competing_page_ids,
       SUM(impressions) AS impressions
FROM gsc_daily
GROUP BY query
HAVING COUNT(DISTINCT page_id) > 1
ORDER BY impressions DESC;

Построчный разбор: что делает, для чего и как работает

Строка 1: SELECT query, — Начинает запрос и перечисляет колонки или выражения, которые нужно вывести.
Строка 2: COUNT(DISTINCT page_id) AS pages_count, — Считает количество строк или уникальных значений.
Строка 3: GROUP_CONCAT(DISTINCT page_id) AS competing_page_ids, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 4: SUM(impressions) AS impressions — Считает сумму числовых значений, например показов или кликов.
Строка 5: FROM gsc_daily — Указывает основную таблицу или источник данных для запроса.
Строка 6: GROUP BY query — Группирует строки, чтобы можно было считать суммы, средние и количества.
Строка 7: HAVING COUNT(DISTINCT page_id) > 1 — Фильтрует уже сгруппированные результаты, например по сумме показов.
Строка 8: ORDER BY impressions DESC; — Сортирует результат, чтобы важные строки оказались выше или ниже.

Что должно получиться

Если результат не пустой, запрос имеет несколько страниц в выдаче.

Если появилась ошибка

Проверьте, что вы работаете в файле seo_lab_from_zero.db, скопировали блок полностью и не потеряли точку с запятой в конце SQL-команды.