【发布时间】:2020-07-05 13:41:01
【问题描述】:
您好,我有 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 进行了比较以确保。我不使用旧 sql 的原因是由于许多 db 调用和 php 处理非常慢。
+----------+------+-------+---------------------------------------------------------------------+
| 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
【问题讨论】:
-
child表不是缺少month列吗? -
正要发布答案,但是太慢了...sqlfiddle.com/#!9/7645ad/4
-
不,孩子不会有月份列,它从父母那里得到月份
-
谢谢尼克!猜猜这真的是唯一的方法吗???? SELECT SUM(p.Payments) AS Payments, COALESCE(SUM(c.Sold),0) AS Sold, p.month FROM ( SELECT id, month, SUM(Payments) AS Payments FROM parent GROUP BY id, month) p LEFT JOIN ( SELECT parent_ref, SUM(Sold) AS Sold FROM child GROUP BY parent_ref ) c ON c.parent_ref = p.id GROUP BY p.month
-
找到另一个答案,2 个查询然后让脚本语言完成它的工作(在我的例子中是 PHP)
标签: mysql sql join group-by sum