按组汇总以制作复合键

Posted

技术标签:

【中文标题】按组汇总以制作复合键【英文标题】:Summarize by group to make a composite key 【发布时间】:2014-12-27 05:47:32 【问题描述】:

我有一个详细的表格,例如:

COMPANY  DATE  GROUP AMT
Sentana  12Dec  A    1200
Sentana  12Dec  B     800
Toyq     12Dec  A    1300
Toyq     12Dec  A     100
Sentana  12Dec  B     300
Toyq     13Dec  A     700
Sentana  12Dec  A     800

现在我想根据 3 列(COMPANY DATE GROUP)创建一个复合唯一键,因此输出如下:

COMPANY  DATE  GROUP AMT
Sentana  12Dec  A    2000
Sentana  12Dec  B    1100
Toyq     12Dec  A    1400
Toyq     13Dec  A     700

我使用过如下查询(SQL): 创建表 TEMP 为 从表中选择 DISTINCT COMPANY、DATE、GROUP、sum(AMT) 按公司、日期、集团分组

Error: The AMT gets increased to many folds maybe 
because there are some more columns.

注意:我需要基于 3 列(COMPANY DATE GROUP)创建一个包含复合键的表,以便我可以将它与另一个表连接起来。我可以通过连接三列来创建复合键,但由于重复组合在 3 列中,很难得到想要的结果。

【问题讨论】:

您使用的是哪个 RDBMS? 在你的选择子句中避免Distinct 我猜我正在使用 SAS,它使用 PostgreSQL 作为后端。它还支持使用 PROC SQL 命令的 SQL 语法。 除了group 是保留字之外,您的查询看起来还不错。 distinct 是不必要的,应该删除,但它不应该导致错误。 问题不清楚。您是要编写 SELECT 查询还是实际向表中添加复合唯一键? 【参考方案1】:

尝试不使用distinct

select COMPANY, DATE, GROUP, sum(AMT) from table group by COMPANY, DATE, GROUP

【讨论】:

在这种情况下,不会形成复合键,这是主要目标。 复合键没有形成是什么意思? group by 子句中的三个变量应该只有唯一值。 即使您添加了显式键,查询也保持不变。您可以使用以下命令添加复合键:alter table xx add key(company,date,group)

以上是关于按组汇总以制作复合键的主要内容,如果未能解决你的问题,请参考以下文章

如何按组汇总数据,通过创建虚拟变量作为折叠方法

一次调用按组对多个变量应用多个汇总函数

如何按组进行汇总并使用R中的dplyr获取总体数据集的摘要

Oracle数据库基础知识点汇总

Spring用外键保存复合主键

Delphi CxGrid 汇总