繁体   English   中英

如何对按父表中的列分组的子表中的行进行求和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM