【问题标题】:Reference a FROM alias in HAVING在 HAVING 中引用 FROM 别名
【发布时间】:2013-10-22 19:02:39
【问题描述】:

这里是 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 子句本身返回一个有效的关系。

【问题讨论】:

    标签: mysql sql having having-clause aggregates


    【解决方案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  
    

    【讨论】:

    • 你能解释一下“L_COPY_HERE”是什么意思吗?
    • 例如select * from loanstats where Loan_duration = 36。事实上,你用来为 L 选择数据的条件相同
    • 感谢 Stanislav,我现在已经运行了。但是,计算汇总统计量然后使用叉积将其附加到每个元组上真的是最佳实践吗?
    猜你喜欢
    • 2011-11-22
    • 2013-01-07
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多