【问题标题】: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 查询还是实际向表中添加复合唯一键?

标签: sql postgresql sas proc-sql


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 2016-08-31
  • 1970-01-01
  • 2019-02-24
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多