有没有办法在不使用子查询的情况下将聚合值和非聚合合并到一个查询中?

时间:2015-02-05 00:06:37

标签: sql teradata

在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中最合适的方法,我认为应该有一个不使用子查询的解决方案。

1 个答案:

答案 0 :(得分:0)

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

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