Я не специалист по БД. Мой уровень это простые запросы. Появилась задача выцепить некоторую статистику из старой CRM ранее использовавшейся в компании(сейчас переходим на новую и конечно экономим на профильных специалистах). Прошу вашей помощи в составлении запроса.
Есть три таблицы. БД MySQL
Таблица History - это заметки.
NOTE - Текст комментария (VARCHAR)
DATECR - Дата создания комментария (DATE)
IDCREATOR - ID создателя (INTEGER)
TYPE - тип заметки (INTEGER)
Таблица Users- пользователи
IDUSER - id юзера (INTEGER)
NAME - ФИО юзера (VARCHAR)
Таблица Customers - компании
IDCUST - id компании
IDUSER - id пользователя кто создал
DATECR - дата создания
Задача: Получить статистику по списку юзеров (передается список IDUSER ) за определенную дату ( начальная и конечная даты):
Количество созданных компаний.
Количество созданных заметок с TYPE 1
Количество созданных заметок с TYPE 2
Количество созданных заметок с TYPE 3
Вывод: Хотелось бы получить таблицу с 5 столбцами(условные названия):
NAME(фио пользователя) | countCompany(кол-во созданных компаний) | countType1 | countType2 | countType3
Пользователь может быть с нулевой статистикой как по всем значениям так и только по некоторым, его в любом случае нужно отобразить в результатах.
С уважением, Waik
WITH
company_stat AS ( SELECT iduser, COUNT(idcust) company_count
FROM customers
-- WHERE iduser IN (...) AND datecr BETWEEN ...
GROUP BY iduser ),
comment_stat AS ( SELECT idcreator, SUM(type=1) type1, SUM(type=2) type2, SUM(type=3) type3
FROM history
-- WHERE idcreator IN (...) AND datecr BETWEEN ...
GROUP BY idcreator )
SELECT users.name, company_stat.company_count, comment_stat.type1, comment_stat.type2, comment_stat.type3
FROM users
LEFT JOIN company_stat ON users.iduser = company_stat.iduser
LEFT JOIN comment_stat ON users.iduser = comment_stat.idcreator
-- WHERE users.iduser IN (...)
на хостинге стоит mysql 5.6.43-84.3
SELECT users.name, company_stat.company_count, comment_stat.type1, comment_stat.type2, comment_stat.type3
FROM users
LEFT JOIN ( SELECT iduser, COUNT(idcust) company_count
FROM customers
-- WHERE iduser IN (...) AND datecr BETWEEN ...
GROUP BY iduser ) AS company_stat ON users.iduser = company_stat.iduser
LEFT JOIN ( SELECT idcreator, SUM(type=1) type1, SUM(type=2) type2, SUM(type=3) type3
FROM history
-- WHERE idcreator IN (...) AND datecr BETWEEN ...
GROUP BY idcreator ) AS comment_stat ON users.iduser = comment_stat.idcreator
-- WHERE users.iduser IN (...)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно в БД таблицы поменять в нескольких местах датуЗапрос сделал, все работает
Как сделать так, чтобы в строке с типом INT могло содержаться значение только в диапазоне от 0 до 100?
Есть обработчик xml файлов, работает через php new xmlreader()Дак вот, есть проблема, пользователи частенько заливают левые кривые файлы, часто возникают...