嗨,我有2张桌子,我想按月分组
+-----------+----------+-------+
| Parent ID | Payments | Month |
+-----------+----------+-------+
| 1 | 100 | 1 |
| 2 | 120 | 1 |
| 3 | 130 | 2 |
+-----------+----------+-------+
+----------+------------+----------+
| Child ID | Parent Ref | Sold |
+----------+------------+----------+
| 1 | 1 | 20 |
| 2 | 1 | 30 |
| 3 | 2 | 50 |
| 4 | 2 | 10 |
+----------+------------+----------+
预期输出应为
+----------+------+-------+------------------------------------------+
| Payments | Sold | Month | Notes (no need sql) |
+----------+------+-------+------------------------------------------+
| 220 | 110 | 1 | <-220=sum(100+120), sum(110=20+30+50+10) |
| 130 | 0 | 2 | <-130=130, null or 0 doesnt matter |
+----------+------+-------+------------------------------------------+
我从查询中得到的是父母的乘积。我使用的是实时数据库,因此无法确定它是否乘以子级数,但是否在某个地方相乘。所有孩子的总和结果都可以,所有父母都知道。我已将此与我以前的SQL进行比较以确保。由于许多数据库调用和PHP处理,我之所以不使用旧sql的原因是它的速度非常慢。
+----------+------+-------+---------------------------------------------------------------------+
| Payments | Sold | Month | Notes (no need sql) |
+----------+------+-------+---------------------------------------------------------------------+
| 880 | 110 | 1 | <-220=sum(100+120)*4 as there are 4 childrows, sum(110=20+30+50+10) |
| 130 | 0 | 2 | <-130=130, null or 0 doesnt matter |
+----------+------+-------+---------------------------------------------------------------------+
我的查询
Select sum(parent.Payments), sum(child.Sold)
from parent, child
where
parent.id = child.parent_ref group by parent.month
答案 0 :(得分:0)
我认为您需要为每个父表预聚合子表,然后在外部查询中进行最终计算:
select
p.month,
sum(p.payments) payments
coalesce(sum(c.sold), 0) sold
from parents p
left join (select parent_ref, sum(sold) sold from children group by parent_ref) c
on c.parent_ref = p.parent_id
group by p.month