해당 게시글은 개인 프로젝트인 "광고 관리 플랫폼 대행사 센터 제작" 중
#105 "통계 관련 쿼리 테스트" 이슈를 다루고 있습니다.
CREATE TABLE IF NOT EXISTS category (
id BIGINT AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
) DEFAULT CHARSET=utf8;
INSERT INTO category (name) VALUES
('테스트');
CREATE TABLE IF NOT EXISTS client (
id VARCHAR(50) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
) DEFAULT CHARSET=utf8;
INSERT INTO client (id, name) VALUES
('테스트광고주1', '김쾅쾅'),
('테스트광고주2', '김큥큥');
CREATE TABLE IF NOT EXISTS campaign (
id BIGINT AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
client_id VARCHAR(50) NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(client_id) REFERENCES client(id)
) DEFAULT CHARSET=utf8;
INSERT INTO campaign (name, client_id) VALUES
('테스트캠페인1', '테스트광고주1'),
('테스트캠페인2', '테스트광고주1'),
('테스트캠페인3', '테스트광고주2');
CREATE TABLE IF NOT EXISTS creative (
id BIGINT AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
budget BIGINT NOT NULL,
campaign_id BIGINT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(campaign_id) REFERENCES campaign(id)
) DEFAULT CHARSET=utf8;
INSERT INTO creative (name, budget, campaign_id) VALUES
('테스트소재1', 10000, 1),
('테스트소재2', 5000, 1),
('테스트소재3', 1000, 1),
('테스트소재4', 1000, 2),
('테스트소재5', 500, 2),
('테스트소재6', 5000, 3);
CREATE TABLE IF NOT EXISTS performance (
id BIGINT AUTO_INCREMENT,
view BIGINT,
click BIGINT,
conversion BIGINT,
spend BIGINT,
purchase BIGINT,
created_at DATETIME,
creative_id BIGINT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(creative_id) REFERENCES creative(id)
);
INSERT INTO performance (view, click, conversion, spend, purchase, created_at, creative_id) VALUES
(1,1,1,1,1, '2022-10-19', 1),
(2,2,2,2,2, '2022-10-18', 1),
(3,3,3,3,3, '2022-10-17', 1),
(4,4,4,4,4, '2022-10-16', 1),
(5,5,5,5,5, '2022-10-15', 1),
(6,6,6,6,6, '2022-10-14', 1),
(7,7,7,7,7, '2022-10-13', 1),
(3,3,3,3,3, '2022-10-17', 2),
(4,4,4,4,4, '2022-10-16', 2),
(0,0,0,0,0, '2022-10-16', 3),
(2,4,6,8,10, '2022-10-18', 4),
(1,1,1,1,1, '2022-10-17', 4),
(0,5,5,3,2, '2022-10-16', 5),
(1,3,4,5,6, '2022-10-16', 6);
SELECT
c.id AS creative_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase),
p.creative_id
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
SELECT
ca.id AS campaign_id,
c.id AS creative_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
GROUP BY c.id
SELECT
ca.id AS campaign_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
SELECT
ca.id AS campaign_id,
c.id AS creative_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
GROUP BY ca.id, c.id
SELECT
ca.id AS campaign_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
GROUP BY ca.id
SELECT
cl.id AS client_id,
ca.id AS campaign_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
LEFT JOIN client AS cl ON cl.id = ca.client_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
GROUP BY cl.id, ca.id
SELECT
cl.id AS client_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
LEFT JOIN client AS cl ON cl.id = ca.client_id
WHERE
p.created_at BETWEEN '2022-10-15' AND '2022-10-19' AND cl.id = '테스트광고주1'
SELECT
cl.id AS client_id,
sum(p.view),
sum(p.click),
sum(p.conversion),
sum(p.spend),
sum(p.purchase)
FROM
performance as p
LEFT JOIN creative AS c ON c.id = p.creative_id
LEFT JOIN campaign AS ca ON ca.id = c.campaign_id
LEFT JOIN client AS cl ON cl.id = ca.client_id
WHERE p.created_at BETWEEN '2022-10-15' AND '2022-10-19'
GROUP BY cl.id