我有表User,Company,ParentCompany和table Goal。 每个公司都有ParentCompany,每个用户都在一个公司内。目标包括行动的数量,目标的类型,执行目标的用户以及执行的时间。
我想为每个用户,公司和parent_company计算每种目标类型的日期范围内的操作数。每家公司的行动数量等于居住在该公司的用户的行动总和。
在一些连接查询之后或多或少,我能够得到下面的表,其中列id是公司的id,parent_id是companyparent的id,num是id公司内所有用户的目标数。
id parent_id num
----------- -------------------- -----------------------
1 3 1
2 1 2
3 1 1
4 2 4
现在我想让它像下面这样:
id parent_id sum_id sum_parent
----------- -------------------- -------------- -------------
1 3 1 1
2 1 2 3
3 1 1 3
4 2 4 4
我怎样才能使它有效?我可以用GROUP BY,
得到一个值(sum_id或sum_parent)SELECT id,SUM(num) AS sum_id FROM tableA GROUP BY id
或
SELECT parent_id,SUM(num) AS sum_parent FROM tableA GROUP BY parent_id
但有没有办法只在一个查询中进行? tableA
来自查询,内部有5个连接。
答案 0 :(得分:0)
试试这个:
SELECT a.id, a.parent_id, a.sum_id, b.sum_parent
FROM (SELECT id, parent_id, SUM(num) sum_id FROM tableA a GROUP BY id) a
INNER JOIN (SELECT parent_id, SUM(num) sum_parent FROM tableA a GROUP BY parent_id) b ON a.parent_id = b.parent_id
答案 1 :(得分:0)
试试这个:
SELECT
t1.id, t1.parent_id, t1.sum_id, t2.sum_parent
FROM
(SELECT id, parent_id, SUM(num) AS sum_id FROM mytable GROUP BY id) t1
INNER JOIN
(SELECT parent_id, SUM(num) AS sum_parent FROM mytable GROUP BY parent_id) t2
ON t1.parent_id = t2.parent_id
答案 2 :(得分:0)
显然我想要的是WITH ROLLUP
声明。 (http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html)
使用
SELECT id,sum(num) FROM tableA GROUP BY parent_id, id WITH ROLLUP;
将导致
parent_id id sum(num)
----------- -------------------- --------------
1 2 2
1 3 1
1 null 3
2 4 4
2 null 4
3 1 2
3 null 2