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 に答える