在HAVING中引用FROM别名

时间:2013-10-15 04:34:33

标签: mysql sql having having-clause aggregates

新手到sql这里。我试图只选择一列中的值大于该列的平均值的元组。问题是,我正在使用的关系是在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 个答案:

答案 0 :(得分: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