【问题标题】:Is there a way to incorporate aggregate values and non-aggregate in one query without using subqueries?有没有办法在一个查询中合并聚合值和非聚合而不使用子查询?
【发布时间】:2015-02-06 06:16:19
【问题描述】:

在 Teradata 中,我想做的是通过保留聚合值并从聚合值计算新值来创建两个聚合值。

我已经完成了这个简单的查询

select 
  a.*, 
  def / n as derived_dr 
from
  (select 
    obsdate
    , sum(def) as def
    , count(*) as n         
from 
    some_table
group by obsdate) as a;

但是在 SAS/SQL 中我可以做例如

    select 
      a.*
      , sum(def) as def
      , count(*) as n 
      , def / n as derived_dr 
     from
         some_table as a;

这更简单,更容易理解。但是,如果我在 Teradata 中尝试上述代码,则会出现错误

选定的非聚合值必须是关联组的一部分

我原来的 Teradata 解决方案是实现这一目标的最佳方式吗?我正在寻找在 Teradata 中执行此操作的最合适的方法,我认为应该有一个不使用子查询的解决方案。

【问题讨论】:

  • a.*some_table 的别名,在您的 FROM 子句中没有别名吗?
  • @RobPaller 正确。更新了我的代码

标签: sql teradata


【解决方案1】:

在同一级别混合详细信息和聚合是 Windowed Aggregate Functions 在 Teradata/Standard SQL 中的任务:

sum(def) over () -- global sum
sum(def) over (partition by obsdate) -- group sum, similar to GROUP BY

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多