sql - 如果表很大,如何按组获取数字的总和
问题描述
我想汇总(汇总)家庭花费的钱。
我有 2 张桌子。
- 会员表(member_id、money_spend)
- 家庭表(household_id、member_id、sum_of_money_spent_by_household)
- 家庭与成员的关系,一个家庭有许多成员,但一个成员属于一个家庭。
我想获取family_id,并按总金额排序。
两个表都很大,成员表是两倍大。我应该如何将数字和分组方式相加会更快?
解决方案
我认为这GROUP BY
是明智的选择,但是,优化空间不大:
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;
我真的不想输入那个查询,但我这样做只是为了指出聚合确实需要潜在地触及表Household
和Member
表中的每条记录。这样做的原因是,在我们统计完每个成员并因此记录每个成员的记录之前,我们不知道一个家庭的总支出。
因为我们正在从 进行左连接Household
,所以我们正在扫描这个表,member_id
连接列上的索引应该没有太大区别。同样,member_id
可能是表中的主键和索引Member
。因此,我不希望索引有助于连接,而且索引也不应该在聚合中产生太大影响。
推荐阅读
- maven - 在 Docker 容器中运行 Karaf 时,如何运行需要访问 maven 存储库的控制台命令?
- javascript - 如何在特定条件后自动关闭 Chrome 浏览器?
- iis - IIS根据子域将请求路由到不同的端口
- javascript - 大家好,我正在尝试使用 js 创建一个侧滑菜单,但我遇到了这个 msg。意外的“常量”。const navSlide = () => {
- for-loop - 增长顺序 - 嵌套循环,具有双倍索引的外部循环
- macos - 无法将 iPad 应用程序转换为 Mac 应用程序:Xcode 找不到任何与“maccatalyst.com...”匹配的 Mac Catalyst 应用程序开发配置文件
- laravel - Laravel 与 mongodb 聚合,选择日期
- angular - 如何使服务在图书馆 Angular 中是全球性的?
- r - R psych,cohen.d 错误 `.rowNamesDF<-`(x, value = value) 中的错误:无效的 'row.names' 长度
- google-chrome-devtools - chrome devtools 在源面板中缺少代码样式(所有字体均为白色)