gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:03:53 25 4
gpt4 key购买 nike

我在 MySQL 中有两个表:

家长:

parent {
id: int,
name: string,
group: string,
}

child :

child {
id: int,
parent_id: int,
value: int,
value_date: date
}

这是一些示例数据:

parent :

id | name | group
1 | A | G1
2 | B | G2
3 | C | G3
4 | D | G2
5 | E | G3
6 | F | G3

child :

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 列中值的总和,按父表的 groupvalue_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')

然后我为来 self 的 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

关于mysql - 如何对按父表中的列分组的子表中的行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52397464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com