MYSQL: оптимизация запроса
От: mogadanez Чехия  
Дата: 26.11.21 15:16
Оценка:
есть такая табличка
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


можно ли лучше?
Отредактировано 26.11.2021 15:52 mogadanez . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.