0

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

我最初使用的是 WHERE 子句,但这个 SO 答案让我相信我可以通过使用 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 子句本身返回一个有效的关系。

4

1 回答 1

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  
于 2013-10-15T05:30:26.783 回答