есть такая табличка
CREATE TABLE stats (
id int(11) UNSIGNED NOT NULL,
companyId int(11) NOT NULL,
projectId int(11) NOT NULL,
subProjectId int(11) NOT NULL,
email varchar(255) NOT NULL,
answered tinyint(1) NOT NULL DEFAULT '0',
opened tinyint(1) NOT NULL DEFAULT '0',
viewed tinyint(1) NOT NULL DEFAULT '0',
)
ALTER TABLE stats
ADD PRIMARY KEY (id),
ADD UNIQUE KEY uniq_target (companyId,projectId,subProjectId,email);
answered, opened, viewed — флажки 0,1
нужно посчитать сколько уникальных email имеют флажки answered, opened, viewed на уровне projectId, не важно для какого именно subProjectId,
те если один email в рамках одного projectId имеет несколько флажков для разных subProjectId — надо считать как один
пока придумался вариант с sub-query:
SELECT s.projectId, SUM(s.answered), SUM(s.opened), SUM(s.viewed)
from (
SELECT projectId, email, MAX( answered ) as answered, MAX( opened) as opened, MAX(viewed) as viewed
FROM stats
where companyId = ?
group by projectId, email ) s
group by s.projectId
можно ли лучше?