Sql 错误3625:分组依据和不能包含聚合函数
我试图在假设的基础上进行计算,所以我假设我可以使用case-when函数来进行计算。例如:Sql 错误3625:分组依据和不能包含聚合函数,sql,teradata,Sql,Teradata,我试图在假设的基础上进行计算,所以我假设我可以使用case-when函数来进行计算。例如: SELECT TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3)
SELECT
TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3) as year_qtr,
case when orr_txt = '1' then (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as DR_1,
case when orr_txt = '2' then (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as DR_2,
case when orr_txt = '3' then (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as DR_3,
avg(cast (dp as float)) as Pred_PD
FROM
raroc.pd_matrixRR a,
raroc.ccc_dp_sc b,
raroc.ratings_convert c
WHERE
start_orr_code in (1)
and case when a.scorecard_group = 'BB' then 'Business Banking' else a.scorecard_group end= b.rating_sys
and a.orr_txt = b.bacrr
and a.orr_txt = c.bacrr_text
and orr_txt not in ('9-', '10', '11', '12', 'NR')
and rating_sys_grp = 'Scorecard'
--and a.orr_txt = '1'
--and scorecard_group = 'Large Corporation'
--and scorecard_group = 'Large Corporation_FI'
--and scorecard_group = 'Middle Market'
--and scorecard_group = 'BB'
--and scorecard_group = 'GCSBB'
--and scorecard_group = 'Real Estate'
and scorecard_group = 'Individuals'
and scorecard_group not like 'Sove%'
and scorecard_group not like 'Lega%'
--and year_qtr < '2014Q2'
group by 1,2,3,4
ORDER BY 2,1
选择
TRIM(摘录(从营业日算起的年份))| |“Q”| TRIM((摘录(从营业日算起的月份)+2)/3)作为年度qtr,
当orr_txt='1'时,则(求和(将rr9m转换为浮点数))/(求和(将总观测值转换为浮点数))-0.5*求和(将lft转换为浮点数)))结束为DR_1,
当orr_txt='2'时,则(总和(以浮动形式转换为rr9m))/(总和(以浮动形式转换为总观测值))-0.5*总和(以浮动形式转换为lft)))结束为DR_2,
当orr_txt='3'时,则(求和(将rr9m转换为浮点数))/(求和(将总观测值转换为浮点数))-0.5*求和(将lft转换为浮点数)))结束为DR_3,
平均值(铸造(dp为浮动))为预制件
从…起
风险调整资本收益率,
风险调整资本收益率,
风险调整资本收益率
哪里
在(1)中启动或禁用代码
当a.scorecard\u group='BB'然后是'Business Banking',否则a.scorecard\u group end=b.rating\u sys
和a.orr_txt=b.bacrr
和a.orr_txt=c.bacrr_text
和orr_txt不在('9-'、'10'、'11'、'12'、'NR'中)
和评级系统grp=‘记分卡’
--和a.orr_txt='1'
--和记分卡组=‘大公司’
--和记分卡组=‘大公司’
--和记分卡组=‘中间市场’
--和记分卡组='BB'
--和记分卡组='GCSBB'
--和记分卡组=‘房地产’
和记分卡组=‘个人’
而记分卡组不像“Sove%”
而记分卡组不像“Lega%”
--以及2014年第四季度<'2014年第二季度'
按1,2,3,4分组
按2,1的顺序排列
它显然没有编译并嘲笑我的逻辑。但是,如果我不将其分组,我将得到一个错误3604。问题是,为了计算1类、2类和3类的利率,我将如何处理这个问题。
非常感谢
SP您必须按
group by
TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3)
, orr_txt
您需要将案例移动到聚合函数中,如下所示:
(sum(case when orr_txt = '1' then cast (rr9m as float) end)
/ (sum(case when orr_txt = '1' then cast (total_observations as float) end)
- 0.5*sum(case when orr_txt = '1' then cast (lft end as float) end ) )) end as DR_1,
我想你只需要条件聚合。这些条件位于聚合函数内部。我认为这是您想要的表达式(当然,每个值重复3次:
SELECT . . .
(sum(case when orr_txt = '1' then cast(rr9m as float) end) /
sum(case when orr_txt = '1' then cast(total_observations as float) end) -
0.5 * sum(case when orr_txt = '1' then cast(lft as float) end)
) as DR_1, . . .
然后,您可以将
groupby
更改为groupby 1
您应该学会使用正确的显式JOIN
语法。谢谢!非常有用!谢谢!非常有用!