我在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;
是否可以在一个查询中执行此操作?
答案 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