2013-10-15 25 views
0

新手到sql这里。我试图只选择一列中的值大于该列平均值的元组。问题是,我正在使用的关系是在FROM子句中创建的,因为我需要添加一个转换(并且还需要一个子集)。在HAVING中引用一个FROM别名

我最初使用WHERE子句,但this SO answer让我相信我可以通过使用HAVING子句来解决问题。我仍然收到此错误,但是:

表“msan692db.l”不存在

如何让的方式,是不是盲目的,我创建别名必要的比较在我的FROM子句中?我想我可以在WHERE/HAVING子句中明确地重新创建所需的关系,但我将在稍后添加更多,这似乎非常低效。

这是我的代码,因为它代表:

select * 
from 
    (select *, ascii(substring(CREDIT_Grade,1,1)) + cast(substring(CREDIT_Grade,2,1) as unsigned) * .2 as CREDIT_Grade_num 
    from loanstats 
    where Loan_duration = 36) L 
group by loan_ID 
having 
    Interest_Rate > (select avg(Interest_Rate) from L) 

编辑:我已经证实,顺便说一下,这FROM子句本身会返回一个有效的关系。

回答

1

您不能移动FROM部分中的子查询吗?喜欢这个?

select * 
from 
    (select *, ascii(substring(CREDIT_Grade,1,1)) + cast(substring(CREDIT_Grade,2,1) as unsigned) * .2 as CREDIT_Grade_num 
    from loanstats 
    where Loan_duration = 36) L, 
    (select avg(Interest_Rate) avg_rate from L_COPY_HERE) iRateAvg 
group by loan_ID 
having 
    Interest_Rate > iRateAvg.avg_rate 
+0

你能澄清你的意思是“L_COPY_HERE”吗? –

+0

E.g.从loanstats中选择Loan_duration = 36。实际上,您使用相同的条件来选择L – StanislavL

+0

的数据感谢Stanislav,我现在已经开始运行了。但是,计算汇总统计量然后使用交叉产品将其应用到每个单元上是否是最佳做法? –