按组汇总以制作复合键
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)
以上是关于按组汇总以制作复合键的主要内容,如果未能解决你的问题,请参考以下文章