У меня относительно сложный запрос с некоторыми подзапросами, которые я использую для создания «Leaderboard» для моих торговых представителей. Проблема в том, что первичные данные фильтруются через Sale_Date, в то время как мне нужен один из столбцов, который должен быть отфильтрован Install_Date (только столбец Installs). Я использую Workbench MySQL и стороннюю платформу бизнес-аналитики для вывода данных презентабельно. Ниже приведен упрощенный вариант того, что я сейчас делаю для этого, но он явно не работает или не дает мне то, что я хочу.Добавление столбца в запрос таблицы MySQL
select `Rep`, `Sales`, `Passed Credit`, `Sales Scheduled`, Installs
from
(select Rep_Name as `Rep`, count(*) as `Sales`..., count(...) as `Sales Scheduled`
from ss.customers
left join ss.users
on customers.rep_id = users.id
where Sale_Date between curdate() - interval 6 day and curdate()
group by Rep_Name with rollup) cust,
(select Rep_Name, count(*) as `Installs`
from ss.customers
left join ss.installs
on customers.id = installs.id
left join ss.users
on customers.rep_id = users.id
where Install_Date between curdate() - interval 6 day and curdate()
group by Rep_Name) inst
order by `Sales` desc, `Passed Credit` desc, ..., `Installs` desc
Выхода я правильно для всех полей в первой таблице «корка», но все мои повторений показать первый «Устанавливает» COUNT возвращаются во второй половине этого запроса ли его 1 или 20 .
Он возвращается что-то вроде этого:
Rep ----- Sales ----- Passed Credit ----- Sales Scheduled ----- Installs
John | 10 | 7 | 6 | 5
Mike | 8 | 7 | 6 | 5
Trey | 8 | 6 | 4 | 5
Drew | 6 | 3 | 3 | 5
Angel | 3 | 2 | 4 | 5
Total | 35 | 25 | 23 | 22
Инсталляционный таблице не включают также некоторые люди, которые не имеют никаких продаж на этой неделе, но они также не показывают здесь, что они должны быть. В идеале это то, что таблица будет выглядеть следующим образом:
Rep ----- Sales ----- Passed Credit ----- Sales Scheduled ----- Installs
John | 10 | 7 | 6 | 5
Mike | 8 | 7 | 6 | 9
Trey | 8 | 6 | 4 | 4
Drew | 6 | 3 | 3 | 4
Angel | 3 | 2 | 4 | 0
Tracy | 0 | 0 | 0 | 3
Diego | 0 | 0 | 0 | 1
Total | 35 | 25 | 23 | 26
Я пробовал некоторые сумасшедшие комбинации соединений, объединений, а также где заявления. Любые другие идеи о том, как получить это? Любая помощь приветствуется!
Update 1 Благодаря spencer7593 я был в состоянии решить мою проблему колонка «Installs» показывает неправильно с помощью объединения левых. В настоящее время все еще работает над отображением повторений с 0 продажами за неделю, но у них есть установки (из продаж в предыдущие недели).
Необходимые квалификационные поля для таблиц в списке, что я забыл включить перед:
Customers - rep_id, Sale_Date, id, Passed_Credit, Sale_Scheduled
Users - id (which is customers.rep_id), Rep_Name, Rep_Office_Location
Installs - id (which is customers.id), Install_Date, Install_Status
Я знаю, что в нашей базе данных CRM бардак с несколькими столбцами одного и того же имени на разных таблицах, представляющих разные вещи. Я не проектировал его, и это то, с чем мне приходится жить в средние сроки.
Вы, сэр, блестящие. Приношу свои извинения за нечеткие столбцы для определенных таблиц и оставляя догадки до вас. Но вы действительно смогли получить большинство из них правильно. Вскоре я обновлю свое оригинальное сообщение, когда я получу минуту. Левое соединение было именно тем, что мне нужно. Я все еще работаю над тем, чтобы забрать этих представителей с 0 продаж за неделю, чтобы заполнить их на столе. В настоящее время экспериментируем с объединением, чтобы добавить их в конец вывода, так как sale_date не является ссылочным столбцом в ss.users. Как только я получу немного дальше, я обновлю вас и сообщение. – Andrew
Чтобы получить «нулевые» подсчеты для «Продажи», сделайте таблицу вождения таблицей, в которой есть все «Rep_Name», и выполните «LEFT JOIN» в таблице, которая имеет связанные продажи. И поставьте предикат (условия) для даты продажи в разделе 'ON', а не в предложении' WHERE'. – spencer7593