【问题标题】:Error while running Query on Teradata-Selected non-aggregate values must be part of the associated group对 Teradata 选择的非聚合值运行查询时出错,必须是关联组的一部分
【发布时间】:2016-07-08 18:42:13
【问题描述】:
 My Query:
 SELECT Case When msa_high>=50 AND msa_high<=60 then 'low'
             When msa_high>60 AND msa_high>=70 then 'medium'
             When msa_high>70 then 'high' end as edu_lv , Sum(rev)/Sum(S_days) AS avg_sales                                        
 from store_msa left join(Select
 (EXTRACT(YEAR FROM t.saledate)||'-'||
 EXTRACT(MONTH FROM t.saledate) ||'-'||
 t.store ) AS mys,COUNT(DISTINCT t.saledate) AS S_days, sum(t.amt) AS rev
 From trnsact t
 Where (t.saledate)<'2005-08-01' AND t.stype='P' AND mys IN
(SELECT
(EXTRACT(YEAR FROM t.saledate)||'-'||
EXTRACT(MONTH FROM t.saledate) ||'-'||
t.store) AS mys
FROM trnsact t
HAVING COUNT(DISTINCT t.saledate)>20
GROUP BY mys,t.store)) AS rev
ON store_msa.store=rev.store
Group By edu_lv,avg_sales
Order By avg_sales;

有人可以指出丢失了哪些参数以找到解决此错误的方法,其次是哪个 Group By 语句产生了此错误。

【问题讨论】:

    标签: teradata


    【解决方案1】:

    有两个问题,看我的内联 cmets(格式化源代码使其可读后)

    SELECT 
       Case 
          When msa_high>=50 
             AND msa_high<=60 
          then 'low'
          When msa_high>60 
             AND msa_high>=70 
          then 'medium'
          When msa_high>70 
          then 'high' 
       end as edu_lv , 
       Sum(rev)/Sum(S_days) AS avg_sales
    from 
       store_msa 
    left join 
      ( Select
          (EXTRACT(YEAR FROM t.saledate)|| '-'||
             EXTRACT(MONTH FROM t.saledate) || '-'||
             t.store ) AS mys, 
          COUNT(DISTINCT t.saledate) AS S_days, 
          sum(t.amt) AS rev
       From 
          trnsact t
       Where (t.saledate)<'2005-08-01' 
          AND t.stype='P' 
          AND mys IN
           ( SELECT
                (EXTRACT(YEAR FROM t.saledate)|| '-'||
                  EXTRACT(MONTH FROM t.saledate) || '-'||
                  t.store) AS mys
             FROM 
                trnsact t
             HAVING 
                COUNT(DISTINCT t.saledate)>20
             GROUP BY 
                mys, 
                t.store 
           ) 
        -- ***** missing GROUP BY, probably mys, store again? *****
      ) AS rev ON store_msa.store=rev.store
    Group By 
       edu_lv, 
       avg_sales  -- ***** remove this, can't group by an aggregated column *****
    Order By 
       avg_sales;
    

    【讨论】:

    • 嗨,它通过编写相同的 group by 语句来工作,但现在它说 rev.store 在数据库中不存在。在 ON 语句中 ON store_msa.store=rev.store 错误代码 - 3810 错误消息 - [Teradata Database] [TeraJDBC 15.10.00.05] [Error 3810] [SQLState 42S22] 列/参数 'UA_DILLARDS.rev.store' 不存在.
    • 您需要将其添加到选择列表中
    • 嗨,是的,问题已解决,但查询仍在运行,不知道为什么。查询逻辑可能有问题。感谢您的帮助。 (如果查询中存在逻辑错误,请告诉我)
    猜你喜欢
    • 2018-07-15
    • 2013-06-27
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-05-14
    • 2020-10-23
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多