MySQL查询以从三个表中获取总数
使用MySQL,我如何获得每个经理团队的总项目和总收入?假设我有这3个不同的表(父子孙): 员工1在监督员1之下,他们都在管理者1之下,依此类推,但实际数据是随机排列的。对数字进行颜色编码,以显示添加的数字 我希望我的查询输出每个经理团队的总项目和总收入,如: 要轻松创建表,请执行以下操作:MySQL查询以从三个表中获取总数,mysql,Mysql,使用MySQL,我如何获得每个经理团队的总项目和总收入?假设我有这3个不同的表(父子孙): 员工1在监督员1之下,他们都在管理者1之下,依此类推,但实际数据是随机排列的。对数字进行颜色编码,以显示添加的数字 我希望我的查询输出每个经理团队的总项目和总收入,如: 要轻松创建表,请执行以下操作: DROP TABLE IF EXISTS manager; CREATE TABLE manager (id int, name varchar(55), no_of_items int, revenu
DROP TABLE IF EXISTS manager;
CREATE TABLE manager (id int, name varchar(55), no_of_items int, revenue int);
INSERT INTO manager (id, name, no_of_items, revenue)
VALUES
(1 , 'Manager1' , 10 , 100),
(2 , 'Manager2' , 20 , 200),
(3 , 'Manager3' , 30 , 300);
DROP TABLE IF EXISTS supervisor;
CREATE TABLE supervisor (id int, name varchar(55), manager_id int, no_of_items int, revenue int);
INSERT INTO supervisor (id, name, manager_id, no_of_items, revenue)
VALUES
(4 , 'Sup1' , 1, 100 , 1000),
(5 , 'Sup2' , 2, 200 , 2000),
(6 , 'Sup3' , 3, 300 , 3000);
DROP TABLE IF EXISTS employee;
CREATE TABLE employee (id int, name varchar(55), supervisor_id int, no_of_items int, revenue int);
INSERT INTO employee (id, name, supervisor_id, no_of_items, revenue)
VALUES
(7 , 'Emp1' , 4, 400 , 4000),
(8 , 'Emp2' , 5, 500 , 5000),
(9 , 'Emp3' , 4, 600 , 6000);
利用和的组合,您可以使用以下各项:
SELECT inner_nest.manager_id,
inner_nest.name,
SUM(inner_nest.total_items) AS total_items,
SUM(inner_nest.total_revenue) AS total_revenue
FROM (
SELECT id as manager_id,
name,
SUM(no_of_items) AS total_items,
SUM(revenue) AS total_revenue
FROM manager
GROUP BY id
UNION ALL
SELECT m.id as manager_id,
m.name,
SUM(s.no_of_items) AS total_items,
SUM(s.revenue) AS total_revenue
FROM manager m
INNER JOIN supervisor s ON s.manager_id = m.id
GROUP BY m.id
UNION ALL
SELECT m.id as manager_id,
m.name,
SUM(e.no_of_items) AS total_items,
SUM(e.revenue) AS total_revenue
FROM manager m
INNER JOIN supervisor s ON s.manager_id = m.id
INNER JOIN employee e ON e.supervisor_id = s.id
GROUP BY m.id
) AS inner_nest
GROUP BY inner_nest.manager_id
利用和的组合,您可以使用以下各项:
SELECT inner_nest.manager_id,
inner_nest.name,
SUM(inner_nest.total_items) AS total_items,
SUM(inner_nest.total_revenue) AS total_revenue
FROM (
SELECT id as manager_id,
name,
SUM(no_of_items) AS total_items,
SUM(revenue) AS total_revenue
FROM manager
GROUP BY id
UNION ALL
SELECT m.id as manager_id,
m.name,
SUM(s.no_of_items) AS total_items,
SUM(s.revenue) AS total_revenue
FROM manager m
INNER JOIN supervisor s ON s.manager_id = m.id
GROUP BY m.id
UNION ALL
SELECT m.id as manager_id,
m.name,
SUM(e.no_of_items) AS total_items,
SUM(e.revenue) AS total_revenue
FROM manager m
INNER JOIN supervisor s ON s.manager_id = m.id
INNER JOIN employee e ON e.supervisor_id = s.id
GROUP BY m.id
) AS inner_nest
GROUP BY inner_nest.manager_id
一个带有适当联接的查询就可以实现这一点。。。伪代码(对不起,我正在手机上输入)
可能需要进行一些调整,但这肯定会为您指明方向一个带有适当连接的查询就可以解决问题。。。伪代码(对不起,我正在手机上输入) 可能需要进行一些调整,但这肯定会为您指明方向尝试以下方法: 试试这个:
使用
UNION ALL
和嵌套子查询,可以得到结果。还可以在以下位置检查sql FIDLE:使用UNION ALL
和嵌套子查询,您可以获得结果。同时检查以下位置的sql FIDLE:
select id,name,COALESCE(sum(distinct m),0)+COALESCE(sum(distinct s),0)+COALESCE(sum(e),0)
as total_item,COALESCE(sum(distinct mv),0)+COALESCE(sum(distinct sv),0)+COALESCE(sum(ev),0)
as total_revenue
from
(
select m.id,m.name,m.no_of_items as m,s.no_of_items as s,e.no_of_items as e,
m.revenue as mv,s.revenue as sv,e.revenue as ev
from manager m left join supervisor s
on m.id=s.manager_id
left join employee e on s.id=e.supervisor_id)a
group by id,name