如何汇总子表中按父表中的列分组的行

时间:2018-09-19 03:13:23

标签: mysql sql group-by

我在MySQL中有两个表:

父母

fig.autofmt_xdate(ha='center')

孩子

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

这将为我提供以下值:(“ G1”,“ G2”,“ G3”)

然后我针对Java代码中上述结果中的每个不同的组值调用一次以下查询:

SELECT DISTINCT group FROM parent;

Java

SELECT SUM(value), value_date FROM child WHERE parent_id IN (SELECT id FROM parent WHERE group = ?) group by value_date;

是否可以在一个查询中执行此操作?

2 个答案:

答案 0 :(得分:2)

我希望您的列名不是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

答案 1 :(得分:1)

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