[英]How to sum rows from a child table grouped by a column in parent table
我在MySQL中有两个表:
家长 :
parent {
id: int,
name: string,
group: string,
}
孩子 :
child {
id: int,
parent_id: int,
value: int,
value_date: date
}
以下是一些示例数据:
父母 :
id | name | group
1 | A | G1
2 | B | G2
3 | C | G3
4 | D | G2
5 | E | G3
6 | F | G3
孩子 :
id | parent_id | value | value_date
1 | 1 | 50 | 2018-09-17
2 | 2 | 10 | 2018-09-17
3 | 4 | 20 | 2018-09-17
4 | 2 | 60 | 2018-09-18
5 | 3 | 20 | 2018-09-17
6 | 5 | 30 | 2018-09-17
7 | 6 | 50 | 2018-09-17
8 | 5 | 20 | 2018-09-18
9 | 1 | 30 | 2018-09-18
10 | 3 | 30 | 2018-09-18
我想找到子表的value
列中的值的总和,按父表的group
和子表的value_date
列分组。 如何在单个查询中执行此操作?
这就是我想要的结果:
group | sum(value) | value_date
G1 | 50 | 2018-09-17
G1 | 30 | 2018-09-18
G2 | 30 | 2018-09-17
G2 | 60 | 2018-09-18
G3 | 100 | 2018-09-17
G3 | 50 | 2018-09-18
基本上,它是基于父组和子值日期的子值的分组。
现在我这样做:
首先得到所有不同的组,如下所示:
SELECT DISTINCT group FROM parent;
这将给我以下值:('G1','G2','G3')
然后我从上面的Java代码结果中为每个不同的组值调用以下查询:
SELECT SUM(value), value_date FROM child WHERE parent_id IN (SELECT id FROM parent WHERE group = ?) group by value_date;
Java :
List<String> groups = getGroups();
for (String group : groups) {
Map<String, Integer> dateValueMap = getValue(group);
}
有没有办法在一个查询中执行此操作?
我希望你的列名不是group
因为它是一个SQL术语和保留字
SELECT
parent.`group`
, child.value_date
, SUM(child.value)
FROM parent
INNER JOIN child ON child.parent_id = parent.id
GROUP BY
parent.`group`
, child.value_date
https://dev.mysql.com/doc/refman/5.7/en/keywords.html#keywords-5-7-detailed-G
SELECT
parent.group,
child.value_date,
SUM(child.value)
FROM
parent
INNER JOIN
child
ON child.parent_id = parent.id
GROUP BY
parent.group,
child.value_date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.