Кампании, содержащие минимум два креатива

Соедините campaigns → ads → creatives и сгруппируйте по кампании с HAVING COUNT(cr.id) >= 2. Считать нужно креативы по всем объявлениям кампании, а не число самих объявлений.

Короткий ответ

Что ответить на собеседовании

Соедините campaigns → ads → creatives и сгруппируйте по кампании с HAVING COUNT(cr.id) >= 2. Считать нужно креативы по всем объявлениям кампании, а не число самих объявлений.

Подробный разбор

Ответ с пояснениями

Условие

Получить список рекламных кампаний, в которых присутствует два и более креативов.

CREATE TABLE campaigns (
    id INT PRIMARY KEY,
    name VARCHAR(128) NOT NULL,
    start_date DATE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    end_date DATE NOT NULL
);

CREATE TABLE ads (
    id INT PRIMARY KEY,
    name VARCHAR(128) NOT NULL,
    type VARCHAR(64) NOT NULL,
    cost INT NOT NULL,
    campaing_id INT REFERENCES campaigns(id)
);

CREATE TABLE creatives (
    id INT PRIMARY KEY,
    picture VARCHAR(256) NOT NULL,
    ads_id INT REFERENCES ads(id)
);

Ответ

Соедините campaigns → ads → creatives и сгруппируйте по кампании с HAVING COUNT(cr.id) >= 2. Считать нужно креативы по всем объявлениям кампании, а не число самих объявлений.

Запрос сохраняет написание campaing_id из предоставленной схемы:

SELECT c.id, c.name
FROM campaigns AS c
JOIN ads AS a ON a.campaing_id = c.id
JOIN creatives AS cr ON cr.ads_id = a.id
GROUP BY c.id, c.name
HAVING COUNT(cr.id) >= 2;

Два креатива могут относиться к одному объявлению или к разным. В показанных связях каждая строка creatives участвует один раз, поэтому DISTINCT внутри COUNT не требуется. Фильтра по датам или типу объявления условие не задаёт.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее