Sql 如果表格较大,如何按组计算数字之和
我想把一家人花的钱加起来 我有两张桌子Sql 如果表格较大,如何按组计算数字之和,sql,Sql,我想把一家人花的钱加起来 我有两张桌子 成员表(成员id、费用) 家庭表(家庭id、成员id、家庭花费的金额) 家庭与成员的关系,一个家庭有许多成员,但一个成员属于一个家庭 我想获得家庭身份证,并按金额排序 两个表都非常大,成员表是两倍大。我应该如何将数字和分组方式相加才能更快?我认为在这里选择分组方式是明智的选择,但是,没有太多的优化空间: SELECT h.household_id, COALESCE(SUM(m.money_spend), 0) AS total F
- 成员表(成员id、费用)
- 家庭表(家庭id、成员id、家庭花费的金额)
- 家庭与成员的关系,一个家庭有许多成员,但一个成员属于一个家庭
两个表都非常大,成员表是两倍大。我应该如何将数字和分组方式相加才能更快?我认为在这里选择分组方式是明智的选择,但是,没有太多的优化空间:
SELECT
h.household_id,
COALESCE(SUM(m.money_spend), 0) AS total
FROM Household h
LEFT JOIN Member m
ON h.member_id = m.member_id
GROUP BY
h.household_id;
我真的不想输入那个查询,但我这样做只是为了指出聚合确实需要潜在地触及家庭
和成员
表中的每个记录。其原因是,在我们统计每个成员以及每个成员的记录之前,我们不知道一个家庭的总开支
因为我们正在从
househouse
执行左联接,所以我们正在扫描此表,member\u id
join列上的索引应该不会有太大区别。类似地,member\u id
可能是member
表中的主键,并被索引。因此,我不希望索引有助于连接,而且索引在聚合中也不会有太大的差别。通常,您需要简单的左连接,并进行分组和求和
select h.household_id, coalesce(sum(m.money_spend),0) as sum_of_money_spent
from household h
left join member m on h.member_id = m.member_id
group by h.household_id
不过,如果家庭成员很多,但每个成员只有一个家庭,请通读您的关系描述我们有1:N关系,您应该在成员表中保留家庭id
值
如果我理解正确的话,您似乎已经实现了与关联实体之间的N:N关系,并且还有一个表实际上保存了每个家庭的信息
请注意,使用适当的数据体系结构,您可以在一个表中获得所需的所有信息,并且不需要额外的联接,除非您想提取每个家庭的一些详细信息,例如他们的地址。我删除了不兼容的数据库标记。像你这样有声望的人应该知道不要在问题上贴上不相关的标签。仅使用实际使用的数据库进行标记。此外,示例数据和期望的结果将帮助其他人理解这个问题。mysql
、sqlserver
、postgresql
和sqlite
???你在这里显然很困惑,这些都是完全不同的产品。您有足够的声誉,知道如何正确标记。:)每个成员id是否有多行?有多少行是大的?