SELECT sum(monthly_target) as month_target
FROM 'tbl_goal'
inner join user
on tbl_goal.uid=user.id where user.store=1 and month='February'
результат: month_target = 9000
SELECT
sum(net) as achieved,
sum(hairs_total) as hairs_total,
sum(beard_total) as beard_total,
sum(product_total) as product_total
FROM 'data'
inner join user
on data.uid=user.id where user.store=1 and month='February'
результат: достигнуто = 103 hairs_total = 63 beard_total = 40 product_total = 0
пожалуйста, дайте мне какой-нибудь намек, как можно объединить их в один?
Трудный. Ваше текущее условие соединения подразумевает, что вы хотите агрегировать по пользователю, но WHERE
дает понять, что вы хотите агрегаты уровня хранилища. Таким образом, мы можем попробовать переписать ваш запрос для агрегирования по магазину. Каждый из двух подзапросов ниже выполняет отдельные агрегации, вводя идентификатор store
через соединение в пользовательскую таблицу. Затем, снаружи, мы присоединяем user
таблицу к каждому из этих подзапросов.
SELECT
u.store,
COALESCE(t1.achieved, 0) AS achieved,
COALESCE(t1.hairs_total, 0) AS hairs_total,
COALESCE(t1.beard_total, 0) AS beard_total,
COALESCE(t1.product_total, 0) AS product_total,
COALESCE(t2.month_target 0) AS month_target
FROM user u
LEFT JOIN
(
SELECT
usr.store,
SUM(d.net) AS achieved,
SUM(d.hairs_total) AS hairs_total,
SUM(d.beard_total) AS beard_total,
SUM(d.product_total) AS product_total
FROM data d
INNER JOIN user usr
ON d.uid = usr.id
WHERE d.month = 'February'
GROUP BY usr.store
) t1
ON u.store = t1.store
LEFT JOIN
(
SELECT
usr.store,
SUM(t.monthly_target) AS month_target
FROM tbl_goal t
INNER JOIN user usr
ON t.uid = usr.id
WHERE t.month = 'February'
GROUP BY usr.store
) t2
ON u.store = t2.store;
WHERE
u.store = 1;
Если вам нужен отчет обо всех магазинах, просто удалите внешнее WHERE
.
SELECT
sum(monthly_target) as month_target,
sum(net) as achieved,
sum(hairs_total) as hairs_total,
sum(beard_total) as beard_total,
sum(product_total) as product_total
FROM
user
inner join 'tbl_goal' on tbl_goal.uid = user.id
inner join 'data' on data.uid = user.id
where
user.store = 1
and month = 'February'
Для достижения этого используйте множественное внутреннее соединение. Попробуй это
SELECT sum(tbl_goal.monthly_target) as month_target, sum(data.net) as achieved,
sum(data.hairs_total) as hairs_total,
sum(data.beard_total) as beard_total,
sum(data.product_total) as product_total
FROM 'tbl_goal'
inner join user
on tbl_goal.uid=user.id
inner join data on tbl_goal.uid=data.uid
where user.store=1 and data.month='February'
COALESCE
. Вы не предоставили нам никаких данных, поэтому мы не смогли проверить наш запрос.