sql - 在几个表中聚合和访问特定数据的最佳方法是什么?
问题描述
我一直在努力处理 Postgres 查询,我认为我正在努力解决的高级问题是在同一查询中构建聚合和非聚合的最佳方式。
例如,假设我有一个公司列表。我想将 IBM 的收入除以其整个行业的总收入。这类查询导致我构建复杂的逻辑,我不确定这是否是最好的方法。
例如,如果我有这个查询:
select extract(year from fisy.date),
(c.carbon/ln(fisy.totalrevenue- fisy.grossprofit)) as emissionsPerCOGS
from company."financials_Income_Statement_yearly" fisy
join company.carbon c
on lower(c.ticker) = lower(fisy.ticker)
where lower(fisy.ticker) = 'ibm.us'
这很好用,它给了我一年和每年的公式结果。
但是假设我有另一个表格,一般来说我有关于 ibm 的详细信息,我希望看到 IBM 的上述结果与他们的行业保持一致。我可以通过以下方式获取 where 语句的代码列表:
select lower(g4.ticker)
from "company"."General" g4
where industry = (
select industry
from "company"."General" g3
where lower(g3.ticker) = 'ibm.us'
)
但是在这一点上,我很困惑如果我将它包含在 where 语句中,那么所有选择结果都是针对聚合数据的,我会因为必须专门从中选择/过滤 IBM 的数据而感到困惑。
所以我的问题是,是否有一种直接的方法来获取聚合数据和单个(ibm 类型)数据,以便我可以在我的数据库中获取单个数据集并将其与一些聚合视图进行比较?
解决方案
例如,假设我有一个公司列表。我想将 IBM 的收入除以其整个行业的总收入。
这个问题陈述非常简单。我不知道您问题中的查询与此问题有什么关系。但你可以这样做:
select sum(revenue) filter (where company = 'IBM') / sum(revenue)
from t;
where
如果您想将其限制为一组特定的公司,您可以添加一个子句。
或者,如果您希望所有公司都这样做:
select company, sum(revenue), sum(sum(revenue)) over ()
from t
group by company;
推荐阅读
- excel - 有没有一种方法可以将 Excel 中的唯一时间格式解析为秒/分钟/小时/天以进行持续时间计算?
- google-sheets - 使用 Regextract 提取带有特殊字符的字符串
- c# - 如何强制 C# 任务对于给定的 ID 一次只存在一次
- bootstrap-4 - 自动换行后引导列无响应且时间过长
- java - 在 CXF 中通过 @Path 和 @PathParam/@BeanParam 避免冗余
- powershell - 使用快捷方式的管理员权限在 UNC 路径上运行 PowerShell 脚本
- google-cloud-platform - 如何使用部署管理器将角色分配给服务帐户
- sql - 您如何检查两个表并仅返回与 sql server 中匹配的表中的值
- s4sdk - 无法通过邮递员在我的 s4sdk 应用程序上运行更新、创建和删除查询
- swift - iOS - 录制 mp4 文件