sql - 我应该如何构建需要大量聚合的表?
问题描述
我正在创建一个名为 的表monthly_revenue
,它将存储显示在每月收入报告 csv 中的列。每行包含一个月和一年的收入数据。大约有 60 列收入数据。数据是从其他八个表中汇总而来的。例如,monthly_revenue
包含以下列:
CREATE TABLE IF NOT EXISTS monthly_revenue (
id serial PRIMARY KEY,
date TIMESTAMP WITHOUT TIME ZONE NOT NULL,
pkg_revenue DOUBLE PRECISION NOT NULL,
reseller_revenue DOUBLE PRECISION NOT NULL,
pkg_revenue DOUBLE PRECISION NOT NULL,
setup_amount DOUBLE PRECISION NOT NULL,
support_amount DOUBLE PRECISION NOT NULL,
promo_credit DOUBLE PRECISION NOT NULL
federal_fee DOUBLE PRECISION NOT NULL,
total_monthly_revenue DOUBLE PRECISION NOT NULL
);
该列monthly_revenue.pkg_revenue
等于月份和年份的其他两个聚合的总和:((SUM(invoices.pkg_cost)) + (SUM(pkg_archive.pkg_cost)))
一些列聚合多个其他列在monthly_revenue
. 例如,列monthly_revenue.total_monthly_revenue
等于SUM(pkg_revenue + reseller_revenue + setup_amount + support_amount - promo_credit - federal_fee)
我目前的计划是创建一个名为 的表monthly_revenue_variables
,该表将存储聚合在monthly_revenue
. 我将使用具有月份和年份的函数作为聚合列(如)的参数monthly_revenue_variables.pkg_revenue
,然后可以将monthly_revenue.total_monthly_revenue
这些列与 中的其他五个列一起聚合monthly_revenue_variables
。
我不喜欢我当前的计划冗余存储数据;monthly_revenue.pkg_revenue
并且monthly_revenue_variables.pkg_revenue
将包含给定月份和年份的完全相同的值。但是,我喜欢这样monthly_revenue_variables
会使我的 sql 代码变平,这样我就不会在monthly_revenue.total_monthly_revenue
.
或者,我正在考虑使用一系列公用表表达式 (CTE) 来代替monthly_revenue_variables
.
我对 sql 比较陌生,所以monthly_revenue
欢迎任何关于如何构造创建和填充的建议!
解决方案
推荐阅读
- javascript - 查找所有可能的具有 k-most 长度的连续子串。(答案已经在 ruby 中找到,需要 javascript 实现)
- c - CMake 不会选择 Zephyr RTOS 相关的库/功能
- c++ - 将“管理器”样式类转换为 C++/DirectX11 中的自由函数
- java - 检查对象java的当前日期
- html - 应用静态体后,A-Camera 仍然通过 a-mixin 移动
- elasticsearch - 搜索保护 LDAP 身份验证 - 用户身份验证最终失败 - Elasticsearch
- java - 如何为主数组列表的元素创建“子数组列表”?
- r - 二分变量的主成分分析
- r - 如何识别 R 组中的第一个/最后一个观察结果?
- javascript - 初学者(经典)Fizzbuzz,而循环不起作用