2015-11-23 92 views
0

我想通过使用一个嵌套的select语句来总计我从一个聚集函数,然后我在最后有一个组但是我得到一个错误,指出关键字by不是。总结一个聚合函数

下面是代码:

SELECT SUM(TOTAL) as CURTOTAL, SUM(LYTOTAL) as CURLYTOTAL 
from 
(select 
pf.*, ps.*, st.*, RANK() OVER (ORDER BY JULsaless desc) as TOTRANK, 
JANSALESS + FEBSALESS + MARSALESS + APRSALESS + MAYSALESS + JUNSALESS + JULSALES as TOTAL, 
JANLYSAL + FEBLYSAL + MARLYSAL + APRLYSAL + MAYLYSAL + JUNLYSAL + JULLYSAL as LYTOTAL` 
from 
payssfile pf left joinpayssspec ps on pf.str#` = ps.str# and pf.item# = ps.item# join storefile 
st on 
pf.str# = st.str# where(year = 2015 and totaltype = '' and pf.str# =38))` group by pf.str#;` 

然后当我去跑,我得到这个消息:

关键字这里并没有预期。在 关键字BY上检测到语法错误。有效令牌的部分列表是使用SKIP WAIT WITH FETCH ORDER UNION EXCEPT OPTIMIZE。

+1

什么是您的数据库? – Mihai

+0

这是一个IBM数据库 – nminar

+0

不确定反引号是怎么回事。当他们都是38岁时,你为什么用'pf.str #'分组?你甚至使用'TOTRANK'?希望优化器足够聪明,可以去除你不需要的东西。它似乎可以直接总结表达式sum(JANLYSAL + ... + JULLYSAL)'。 – shawnt00

回答

2

无论你的数据库管理系统是什么,你都缺少一个别名。 您应该为总是为您正在使用的派生表分配一个别名。

派生表的例子

select... 
from (
-- this part of the query is a derived table: 
select ... from ... 
) as <ALIAS_HERE> -- must give derived table an alias 

这就是为什么你必须靠近GROUP BY

在您的特定示例的错误只需更换

)) group by pf.str#; 

)) foo group by pf.str#; 
-- here you will name your derived table foo, to be able to call it's columns by foo.column_name 

这是对SO上的一个类似问题的reference

+0

中使用,这真的解决了我的问题!谢谢! – nminar

0

它看起来像你没有给你的子查询的别名pf,pf是在子查询中的表名,但不是子查询本身。因此,按功能分组。